##                      _             _ 
##  _ __ ___   ___   __| |    ___ ___| |  
## | '_ ` _ \ / _ \ / _` |   / __/ __| |  
## | | | | | | (_) | (_| |   \__ \__ \ | mod_ssl - Apache Interface to SSLeay  
## |_| |_| |_|\___/ \__,_|___|___/___/_| http://www.engelschall.com/sw/mod_ssl/
##                      |_____|         
## ____________________________________________________________________________
##
## apache.patch -- Annotated Apache SSL Patches
## Copyright (c) 1998 Ralf S. Engelschall, All Rights Reserved. 
## Created on: 10-Oct-1998
##
## This file assembles all changes to existing Apache source files between the
## original Apache and the SSL-patched variant. It can be automatically applied
## to a vanilla Apache source tree with the 'patch' tool to upgrade those files
## to be SSL-aware. Each patch snippet is annotated with a short description.
##

#  Now first we have to patch APACI's configuration script to make sure
#  mod_ssl is not implicitly configured as a DSO (which doesn't work) on
#  --enable-shared options. Additionally a flag is passed to Makefile.tmpl
#  which indicated whether mod_ssl is activated or not and support for the
#  SSL_BASE variable is added. Finally we also provide adjustments of
#  the HTTPS port (443) similar to the HTTP port (80).

Index: configure
===================================================================
*** configure	1998/09/22 08:42:41	1.1.1.3
--- configure	1998/10/30 16:04:57	1.10
***************
*** 197,202 ****
--- 197,205 ----
  suexec_gidmin=100
  suexec_safepath="/usr/local/bin:/usr/bin:/bin"
  
+ #   ssl defaults
+ ssl=0
+ 
  #   with support tools
  support=1
  
***************
*** 279,285 ****
      echo "##" >>$configstatus
      echo "" >>$configstatus
      for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
!                LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB; do
          eval "val=\"\$$var\""
          if [ ".$val" != . ]; then
              echo "$var=$val" |\
--- 282,288 ----
      echo "##" >>$configstatus
      echo "" >>$configstatus
      for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
!                LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB SSL_BASE RSA_BASE; do
          eval "val=\"\$$var\""
          if [ ".$val" != . ]; then
              echo "$var=$val" |\
***************
*** 606,612 ****
                                 eval "shared_${module}=yes" 
                             done
                             IFS="$OIFS"
!                            shared_so=no        # because of bootstrapping
                             ;;
                         remain ) 
                             OIFS="$IFS" IFS=':'
--- 609,615 ----
                                 eval "shared_${module}=yes" 
                             done
                             IFS="$OIFS"
!                            shared_so=no         # because of bootstrapping
                             ;;
                         remain ) 
                             OIFS="$IFS" IFS=':'
***************
*** 765,770 ****
--- 768,780 ----
  fi
  
  ##
+ ##  SSL support
+ ##
+ if [ ".$module_ssl" = .yes ]; then
+     ssl=1
+ fi
+ 
+ ##
  ##  expand path variables and make sure
  ##  they do not end with a backslash
  ##
***************
*** 812,817 ****
--- 822,828 ----
  ##
  conf_group="#-1"
  conf_port="80"
+ conf_port_ssl="443"
  conf_serveradmin="you@your.address"
  conf_servername="new.host.name"
  if [ ".$confadjust" = .1 ]; then
***************
*** 824,829 ****
--- 835,841 ----
      fi
      if [ ".`id | grep root`" = . ]; then
          conf_port="8080"
+         conf_port_ssl="8443"
      fi
      conf_serveradmin="`$aux/buildinfo.sh -n %u@%h%d`"
      conf_servername="`$aux/buildinfo.sh -n %h%d`"
***************
*** 912,919 ****
--- 924,933 ----
  -e "s%@suexec_uidmin@%$suexec_uidmin%g" \
  -e "s%@suexec_gidmin@%$suexec_gidmin%g" \
  -e "s%@suexec_safepath@%$suexec_safepath%g" \
+ -e "s%@ssl@%$ssl%g" \
  -e "s%@conf_group@%$conf_group%g" \
  -e "s%@conf_port@%$conf_port%g" \
+ -e "s%@conf_port_ssl@%$conf_port_ssl%g" \
  -e "s%@conf_serveradmin@%$conf_serveradmin%g" \
  -e "s%@conf_servername@%$conf_servername%g" \
  -e "s%@build_support@%$build_support%g" \
***************
*** 956,962 ****
  #   generate settings from imported environment variables
  OIFS="$IFS" IFS="$DIFS"
  for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
!            LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB DEPS; do
      eval "val=\"\$$var\"";
      if [ ".$val" != . ]; then
          case $var in 
--- 970,976 ----
  #   generate settings from imported environment variables
  OIFS="$IFS" IFS="$DIFS"
  for var in CC CPP OPTIM CFLAGS CFLAGS_SHLIB LDFLAGS LD_SHLIB LDFLAGS_SHLIB \
!            LDFLAGS_SHLIB_EXPORT LIBS INCLUDES RANLIB DEPS SSL_BASE RSA_BASE; do
      eval "val=\"\$$var\"";
      if [ ".$val" != . ]; then
          case $var in 

#  Now we incorporate support for the `make certificate' procedure and
#  second support for the `make install' procedure where the configuration
#  now is also adjusted for SSL directives and SSL certs and support programs
#  are now additionally installed.

Index: Makefile.tmpl
===================================================================
*** Makefile.tmpl	1998/09/22 08:42:41	1.1.1.3
--- Makefile.tmpl	1998/10/21 09:20:35	1.23
***************
*** 118,126 ****
--- 118,130 ----
  suexec_gidmin   = @suexec_gidmin@
  suexec_safepath = @suexec_safepath@
  
+ #  SSL (optional)
+ ssl = @ssl@
+ 
  #   some substituted configuration parameters
  conf_group       = @conf_group@
  conf_port        = @conf_port@
+ conf_port_ssl    = @conf_port_ssl@
  conf_serveradmin = @conf_serveradmin@
  conf_servername  = @conf_servername@
  
***************
*** 130,135 ****
--- 134,144 ----
  clean-support     = @clean_support@
  distclean-support = @distclean_support@
  
+ #   `make certificate' parameters
+ TYPE = test
+ CRT  =
+ KEY  =
+ 
  #   forwarding arguments
  MFWD = root=$(root)
  
***************
*** 147,153 ****
  #   build the package
  build:
  	@echo "===> $(SRC)"
! 	@$(MAKE) -f $(MKF) $(MFLAGS) $(MFWD) build-std $(build-support)
  	@touch $(TOP)/$(SRC)/.apaci.build.ok
  	@echo "<=== $(SRC)"
  
--- 156,162 ----
  #   build the package
  build:
  	@echo "===> $(SRC)"
! 	@$(MAKE) -f $(MKF) $(MFLAGS) $(MFWD) build-std $(build-support) build-certificate
  	@touch $(TOP)/$(SRC)/.apaci.build.ok
  	@echo "<=== $(SRC)"
  
***************
*** 174,179 ****
--- 183,221 ----
  	fi; \
  	echo "<=== $(SRC)/support"
  
+ #   SSL certificate generation
+ build-certificate:
+ 	-@if [ ".$(ssl)" = .1 ]; then \
+ 		if [ ".`grep '(SKIPME)' $(TOP)/conf/ssl.crt/server.crt`" != . ]; then \
+ 			if [ ".$(QUIET)" != .1 ]; then \
+ 				echo "+----------------------------------------------------------------------+"; \
+ 				echo "| Before you install the package you now should prepare the SSL        |"; \
+ 				echo "| certificate system by running the 'make certificate' command.        |"; \
+ 				echo "| For different situations the following variants are provided:        |"; \
+ 				echo "|                                                                      |"; \
+ 				echo "| % make certificate TYPE=dummy    (dummy  cert signed by Snake Oil CA)|"; \
+ 				echo "| % make certificate TYPE=test     (test   cert signed by Snake Oil CA)|"; \
+ 				echo "| % make certificate TYPE=custom   (custom cert signed by own CA)      |"; \
+ 				echo "| % make certificate TYPE=existing (use existing cert)                 |"; \
+ 				echo "|        CRT=/path/to/your.crt [KEY=/path/to/your.key]                 |"; \
+ 				echo "|                                                                      |"; \
+ 				echo "| Use TYPE=dummy    when you're a vendor package maintainer,           |"; \
+ 				echo "| the TYPE=test     when you're an admin but want to do tests only,    |"; \
+ 				echo "| the TYPE=custom   when you're an admin willing to run a real server  |"; \
+ 				echo "| and TYPE=existing when you're an admin who upgrades its server.      |"; \
+ 				echo "| (default is TYPE=test)                                               |"; \
+ 				echo "|                                                                      |"; \
+ 				echo "| Thanks for using Apache & mod_ssl.       Ralf S. Engelschall         |"; \
+ 				echo "|                                          rse@engelschall.com         |"; \
+ 				echo "|                                          www.engelschall.com         |"; \
+ 				echo "+----------------------------------------------------------------------+"; \
+ 			fi \
+ 		fi \
+ 	fi
+ 
+ certificate:
+ 	@cd $(TOP)/$(SRC); $(MAKE) $(MFLAGS) certificate TYPE=$(TYPE) CRT=$(CRT) KEY=$(KEY)
+ 
  ## ------------------------------------------------------------------
  ##                       Installation Targets
  ## ------------------------------------------------------------------
***************
*** 206,211 ****
--- 248,257 ----
  		echo "|                                                        |"; \
  		echo "|   $(sbindir)/apachectl start"; \
  		echo "|                                                        |"; \
+ 		echo "| Or when you want to run it with SSL enabled use:       |"; \
+ 		echo "|                                                        |"; \
+ 		echo "|   $(sbindir)/apachectl startssl"; \
+ 		echo "|                                                        |"; \
  		echo "| Thanks for using Apache.       The Apache Group        |"; \
  		echo "|                                http://www.apache.org/  |"; \
  		echo "+--------------------------------------------------------+"; \
***************
*** 224,229 ****
--- 270,278 ----
  	$(MKDIR) $(root)$(mandir)/man1
  	$(MKDIR) $(root)$(mandir)/man8
  	$(MKDIR) $(root)$(sysconfdir)
+ 	$(MKDIR) $(root)$(sysconfdir)/ssl.crt
+ 	$(MKDIR) $(root)$(sysconfdir)/ssl.csr
+ 	$(MKDIR) $(root)$(sysconfdir)/ssl.key
  	$(MKDIR) $(root)$(datadir)/htdocs
  	$(MKDIR) $(root)$(datadir)/icons
  	$(MKDIR) $(root)$(datadir)/cgi-bin
***************
*** 378,383 ****
--- 427,438 ----
  		 echo ""; \
  		 cat $(TOP)/conf/$${conf}-dist ) |\
  		 sed -e '/# LoadModule/r $(TOP)/$(SRC)/.apaci.install.conf' \
+ 			-e 's;logs/ssl_mutex;$(runtimedir)/ssl_mutex;' \
+ 			-e 's;logs/ssl_scache;$(runtimedir)/ssl_scache;' \
+ 			-e 's;logs/ssl_engine_log;$(logfiledir)/ssl_engine_log;' \
+ 			-e 's;logs/ssl_request_log;$(logfiledir)/ssl_request_log;' \
+ 			-e 's;@@ServerRoot@@/conf/ssl.crt;$(sysconfdir)/ssl.crt;' \
+ 			-e 's;@@ServerRoot@@/conf/ssl.key;$(sysconfdir)/ssl.key;' \
  			-e 's;@@ServerRoot@@/htdocs;$(datadir)/htdocs;' \
  			-e 's;@@ServerRoot@@/icons;$(datadir)/icons;' \
  			-e 's;@@ServerRoot@@/cgi-bin;$(datadir)/cgi-bin;' \
***************
*** 394,401 ****
--- 449,459 ----
  			-e 's;conf/mime.types;$(sysconfdir)/mime.types;' \
  			-e 's;Group #-1;Group $(conf_group);' \
  			-e 's;Port 80;Port $(conf_port);' \
+ 			-e 's;Listen 80;Listen $(conf_port);' \
+ 			-e 's;Listen 443;Listen $(conf_port_ssl);' \
  			-e 's;ServerAdmin you@your.address;ServerAdmin $(conf_serveradmin);' \
  			-e 's;ServerName new.host.name;ServerName $(conf_servername);' \
+ 			-e 's;VirtualHost _default_:443;VirtualHost _default_:$(conf_port_ssl);' \
          	> $(TOP)/$(SRC)/.apaci.install.tmp && \
  		echo "$(INSTALL_DATA) $(TOP)/conf/$${conf}-dist[*] $(root)$(sysconfdir)/$${conf}.default"; \
  		$(INSTALL_DATA) $(TOP)/$(SRC)/.apaci.install.tmp $(root)$(sysconfdir)/$${conf}.default; \
***************
*** 416,421 ****
--- 474,530 ----
  			echo "[PRESERVING EXISTING CONFIG FILE: $(root)$(sysconfdir)/$${conf}]"; \
  		fi; \
  	done
+ 	-@if [ ".$(ssl)" = .1 ]; then \
+ 		echo "chmod 755 $(root)$(sysconfdir)/ssl.crt"; \
+ 		chmod 755 $(root)$(sysconfdir)/ssl.crt; \
+ 		echo "chmod 755 $(root)$(sysconfdir)/ssl.csr"; \
+ 		chmod 755 $(root)$(sysconfdir)/ssl.csr; \
+ 		echo "chmod 700 $(root)$(sysconfdir)/ssl.key"; \
+ 		chmod 700 $(root)$(sysconfdir)/ssl.key; \
+ 		if [ ! -f "$(root)$(sysconfdir)/ssl.crt/README.CRT" ]; then \
+ 			echo "$(INSTALL_DATA) $(TOP)/conf/ssl.crt/README.CRT $(root)$(sysconfdir)/ssl.crt/README.CRT"; \
+ 			$(INSTALL) $(TOP)/conf/ssl.crt/README.CRT $(root)$(sysconfdir)/ssl.crt/README.CRT; \
+ 			echo "$(INSTALL_DATA) $(TOP)/conf/ssl.crt/Makefile $(root)$(sysconfdir)/ssl.crt/Makefile"; \
+ 			$(INSTALL) $(TOP)/conf/ssl.crt/Makefile $(root)$(sysconfdir)/ssl.crt/Makefile; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.crt/ca-bundle.crt $(root)$(sysconfdir)/ssl.crt/ca-bundle.crt"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.crt/ca-bundle.crt $(root)$(sysconfdir)/ssl.crt/ca-bundle.crt; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.crt/snakeoil.crt $(root)$(sysconfdir)/ssl.crt/snakeoil.crt"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.crt/snakeoil.crt $(root)$(sysconfdir)/ssl.crt/snakeoil.crt; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.crt/server.crt $(root)$(sysconfdir)/ssl.crt/server.crt"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.crt/server.crt $(root)$(sysconfdir)/ssl.crt/server.crt; \
+ 			if [ -f "$(TOP)/conf/ssl.crt/ca.crt" ]; then \
+ 				echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.crt/ca.crt $(root)$(sysconfdir)/ssl.crt/ca.crt"; \
+ 				$(INSTALL) -m 400 $(TOP)/conf/ssl.crt/ca.crt $(root)$(sysconfdir)/ssl.crt/ca.crt; \
+ 			fi; \
+ 		else \
+ 			echo "[PRESERVING EXISTING CERTIFICATE FILES: $(root)$(sysconfdir)/ssl.crt/*]"; \
+ 		fi; \
+ 		echo "Updating hash symlinks in $(root)$(sysconfdir)/ssl.crt/:"; \
+ 		SSL_PROGRAM="`grep '^SSL_PROGRAM=' $(TOP)/$(SRC)/Makefile.config | sed -e 's:^.*=::'`"; \
+ 		(cd $(root)$(sysconfdir)/ssl.crt/ && $(MAKE) $(MFLAGS) SSLEAY=$$SSL_PROGRAM); \
+ 		if [ ! -f "$(root)$(sysconfdir)/ssl.csr/README.CSR" ]; then \
+ 			echo "$(INSTALL_DATA) $(TOP)/conf/ssl.csr/README.CSR $(root)$(sysconfdir)/ssl.csr/README.CSR"; \
+ 			$(INSTALL) $(TOP)/conf/ssl.csr/README.CSR $(root)$(sysconfdir)/ssl.csr/README.CSR; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.csr/server.csr $(root)$(sysconfdir)/ssl.csr/server.csr"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.csr/server.csr $(root)$(sysconfdir)/ssl.csr/server.csr; \
+ 		else \
+ 			echo "[PRESERVING EXISTING CSR FILES: $(root)$(sysconfdir)/ssl.csr/*]"; \
+ 		fi; \
+ 		if [ ! -f "$(root)$(sysconfdir)/ssl.key/README.KEY" ]; then \
+ 			echo "$(INSTALL_DATA) $(TOP)/conf/ssl.key/README.KEY $(root)$(sysconfdir)/ssl.key/README.KEY"; \
+ 			$(INSTALL) $(TOP)/conf/ssl.key/README.KEY $(root)$(sysconfdir)/ssl.key/README.KEY; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.key/snakeoil.key $(root)$(sysconfdir)/ssl.key/snakeoil.key"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.key/snakeoil.key $(root)$(sysconfdir)/ssl.key/snakeoil.key; \
+ 			echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.key/server.key $(root)$(sysconfdir)/ssl.key/server.key"; \
+ 			$(INSTALL) -m 400 $(TOP)/conf/ssl.key/server.key $(root)$(sysconfdir)/ssl.key/server.key; \
+ 			if [ -f "$(TOP)/conf/ssl.key/ca.key" ]; then \
+ 				echo "$(INSTALL_DATA) -m 400 $(TOP)/conf/ssl.key/ca.key $(root)$(sysconfdir)/ssl.key/ca.key"; \
+ 				$(INSTALL) -m 400 $(TOP)/conf/ssl.key/ca.key $(root)$(sysconfdir)/ssl.key/ca.key; \
+ 			fi; \
+ 		else \
+ 			echo "[PRESERVING EXISTING KEY FILES: $(root)$(sysconfdir)/ssl.key/*]"; \
+ 		fi; \
+ 	fi
  	@echo "<=== [config]"
  
  

#  Now we patch in support for the Extended API (EAPI)

Index: src/Configure
===================================================================
*** src/Configure	1998/10/07 11:28:04	1.1.1.4
--- src/Configure	1998/10/25 15:11:19	1.2
***************
*** 237,242 ****
--- 237,243 ----
  RULE_IRIXNIS=`./helpers/CutRule IRIXNIS $file`
  RULE_IRIXN32=`./helpers/CutRule IRIXN32 $file`
  RULE_PARANOID=`./helpers/CutRule PARANOID $file`
+ RULE_EAPI=`./helpers/CutRule EAPI $file`
  RULE_SHARED_CORE=`./helpers/CutRule SHARED_CORE $file`
  RULE_SHARED_CHAIN=`./helpers/CutRule SHARED_CHAIN $file`
  
***************
*** 1467,1472 ****
--- 1468,1480 ----
      REGLIB="regex/libregex.a"
      SUBDIRS="regex $SUBDIRS"
      CFLAGS="$CFLAGS -DUSE_HSREGEX"
+ fi
+ 
+ ####################################################################
+ # Extended API support:
+ if [ "$RULE_EAPI" = "yes" ]; then
+     echo " + enabling Extended API (EAPI)"
+     CFLAGS="$CFLAGS -DEAPI"
  fi
  
  ####################################################################

#  Now we just add the SSL_BASE variable and the AddModule entry for mod_ssl
#  (libssl.a). This way an SSL-aware Apache can still be built with the old
#  Apache 1.2 configuration procedure.

Index: src/Configuration.tmpl
===================================================================
*** src/Configuration.tmpl	1998/09/22 08:42:44	1.1.1.3
--- src/Configuration.tmpl	1998/10/25 15:11:19	1.7
***************
*** 26,31 ****
--- 26,52 ----
  # not enabled).  The AddModule directive can be used to enable such a
  # module.  By default no such modules are defined.
  
+ ################################################################
+ # SSL support:
+ #
+ # o Set SSL_BASE to either the directory of your SSLeay 
+ #   source tree or the installation tree. Alternatively you can
+ #   also use the value 'SYSTEM' which then indicates that SSLeay
+ #   is installed under various system locations.
+ #
+ # o If you're a US-citizen you have to compile SSLeay with the
+ #   RSAref library (which replaces the RSA code of SSLeay)
+ #   because of patent legalities with the RSA algorithm used for
+ #   the SSL protocol. For this situation you already have to
+ #   compile SSLeay with the -DRSAref define and now you have to
+ #   force Apache to link against the RSAglue library (from
+ #   SSLeay) and the rsaref library (from RSA). So, set RSA_BASE
+ #   to the directory of your RSAref source tree or to 'SYSTEM'
+ #   (indicating that librsaref.a is installed under a system
+ #   location)
+ 
+ #SSL_BASE=/usr/local/ssl
+ #RSA_BASE=/usr/local/rsa
  
  ################################################################
  # Makefile configuration
***************
*** 155,166 ****
--- 176,192 ----
  #  is performing this function. If PARANOID is set to yes, it will
  #  actually print-out the code that the modules execute
  #
+ # EAPI:
+ #  Enable the Extended API which provides more module hooks, a generic
+ #  low-level hook mechanism and a generic context mechanism.
+ #
  
  Rule SOCKS4=no
  Rule SOCKS5=no
  Rule IRIXNIS=no
  Rule IRIXN32=yes
  Rule PARANOID=no
+ Rule EAPI=no
  
  # The following rules should be set automatically by Configure. However, if
  # they are not set by Configure (because we don't know the correct value for
***************
*** 385,388 ****
--- 411,420 ----
  ## should be the last (highest priority) module.
  
  AddModule modules/standard/mod_setenvif.o
+ 
+ ## mod_ssl incorporates SSL into Apache.
+ ## It must stay last here to be first in execution to 
+ ## fake basic authorization.
+ 
+ # AddModule modules/ssl/libssl.a
  

#  Now we add the `certificate' Make target which can be used to
#  create a self-signed dummy server certificate for testing.

Index: src/Makefile.tmpl
===================================================================
*** src/Makefile.tmpl	1998/09/22 08:42:45	1.1.1.3
--- src/Makefile.tmpl	1998/10/25 15:11:19	1.9
***************
*** 11,16 ****
--- 11,20 ----
    $(OSDIR)/libos.a \
    ap/libap.a
  
+ TYPE=test
+ CRT=
+ KEY=
+ 
  .c.o:
  	$(CC) -c $(INCLUDES) $(CFLAGS) $<
  
***************
*** 50,55 ****
--- 54,66 ----
  		    ln libhttpd.$(SHLIB_SUFFIX_NAME) libhttpd.$(SHLIB_SUFFIX_NAME).$$suffix; \
  		done; \
  	fi
+ 
+ certificate:   
+ 	@./support/mkcert.sh \
+ 		"$(MAKE)" "$(MFLAGS_STATIC)" \
+ 		"$(SSL_PROGRAM)" ./support \
+ 		"$(TYPE)" "$(CRT)" "$(KEY)"
+ 	@cd ../conf/ssl.crt; $(MAKE) $(MFLAGS_STATIC) SSLEAY=$(SSL_PROGRAM) >/dev/null 2>&1
  
  subdirs:
  	@for i in $(SUBDIRS); do \

#  Now we add the build support for ap_hook.c and ap_ctx.c

Index: src/ap/Makefile.tmpl
===================================================================
*** src/ap/Makefile.tmpl	1998/09/22 08:42:47	1.1.1.3
--- src/ap/Makefile.tmpl	1998/10/25 15:11:20	1.2
***************
*** 6,12 ****
  LIB=libap.a
  
  OBJS=ap_execve.o ap_cpystrn.o ap_signal.o \
!      ap_slack.o ap_snprintf.o ap_fnmatch.o
  
  .c.o:
  	$(CC) -c $(INCLUDES) $(CFLAGS) $<
--- 6,12 ----
  LIB=libap.a
  
  OBJS=ap_execve.o ap_cpystrn.o ap_signal.o \
!      ap_slack.o ap_snprintf.o ap_fnmatch.o ap_hook.o ap_ctx.o
  
  .c.o:
  	$(CC) -c $(INCLUDES) $(CFLAGS) $<

#  Now we add the build support for ap_hook.c and ap_ctx.c (Win32)

Index: src/ap/ap.mak
===================================================================
*** src/ap/ap.mak	1998/09/22 08:42:48	1.1.1.3
--- src/ap/ap.mak	1998/10/26 16:48:19	1.2
***************
*** 48,53 ****
--- 48,55 ----
  CLEAN :
  	-@erase "$(INTDIR)\ap_cpystrn.obj"
  	-@erase "$(INTDIR)\ap_fnmatch.obj"
+ 	-@erase "$(INTDIR)\ap_hook.obj"
+ 	-@erase "$(INTDIR)\ap_ctx.obj"
  	-@erase "$(INTDIR)\ap_signal.obj"
  	-@erase "$(INTDIR)\ap_slack.obj"
  	-@erase "$(INTDIR)\ap_snprintf.obj"
***************
*** 70,75 ****
--- 72,79 ----
  LIB32_OBJS= \
  	"$(INTDIR)\ap_cpystrn.obj" \
  	"$(INTDIR)\ap_fnmatch.obj" \
+ 	"$(INTDIR)\ap_hook.obj" \
+ 	"$(INTDIR)\ap_ctx.obj" \
  	"$(INTDIR)\ap_signal.obj" \
  	"$(INTDIR)\ap_slack.obj" \
  	"$(INTDIR)\ap_snprintf.obj"
***************
*** 100,105 ****
--- 104,111 ----
  CLEAN :
  	-@erase "$(INTDIR)\ap_cpystrn.obj"
  	-@erase "$(INTDIR)\ap_fnmatch.obj"
+ 	-@erase "$(INTDIR)\ap_hook.obj"
+ 	-@erase "$(INTDIR)\ap_ctx.obj"
  	-@erase "$(INTDIR)\ap_signal.obj"
  	-@erase "$(INTDIR)\ap_slack.obj"
  	-@erase "$(INTDIR)\ap_snprintf.obj"
***************
*** 122,127 ****
--- 128,135 ----
  LIB32_OBJS= \
  	"$(INTDIR)\ap_cpystrn.obj" \
  	"$(INTDIR)\ap_fnmatch.obj" \
+ 	"$(INTDIR)\ap_hook.obj" \
+ 	"$(INTDIR)\ap_ctx.obj" \
  	"$(INTDIR)\ap_signal.obj" \
  	"$(INTDIR)\ap_slack.obj" \
  	"$(INTDIR)\ap_snprintf.obj"

#  Now we have to add additional structure variables which
#  hold the SSL context information under run-time.

Index: src/include/buff.h
===================================================================
*** src/include/buff.h	1998/07/21 18:46:42	1.1.1.2
--- src/include/buff.h	1998/10/29 14:57:51	1.5
***************
*** 124,129 ****
--- 124,133 ----
      /* transport handle, for RPC binding handle or some such */
      void *t_handle;
  
+ #ifdef EAPI
+     ap_ctx *ctx;
+ #endif /* EAPI */
+ 
  #ifdef B_SFIO
      Sfio_t *sf_in;
      Sfio_t *sf_out;

#  Now we add more EAPI stuff

Index: src/include/http_config.h
===================================================================
*** src/include/http_config.h	1998/09/22 08:42:56	1.1.1.3
--- src/include/http_config.h	1998/10/25 15:11:21	1.2
***************
*** 269,274 ****
--- 269,323 ----
      void (*child_exit) (server_rec *, pool *);
  #endif
      int (*post_read_request) (request_rec *);
+ 
+ #ifdef EAPI
+     /*
+      * ANSI C guarantees us that we can at least _extend_ the module structure
+      * with additional hooks without the need to change all existing modules.
+      * Because: ``If there are fewer initializers in the list than members of
+      * the structure, the trailing members are initialized with 0.'' (The C
+      * Programming Language, 2nd Ed., A8.7 Initialization). So we just
+      * have to put our additional hooks here:
+      *
+      * add_module: 
+      *     Called from within ap_add_module() right after the module structure
+      *     was linked into the Apache internal module list.  It is mainly
+      *     intended to be used to define configuration defines (<IfDefine>)
+      *     which have to be available directly after a LoadModule/AddModule.
+      *     Actually this is the earliest possible hook a module can use.
+      *
+      * remove_module: 
+      *     Called from within ap_remove_module() right before the module
+      *     structure is kicked out from the Apache internal module list.
+      *     Actually this is last possible hook a module can use and exists for
+      *     consistency with the add_module hook.
+      *
+      * rewrite_command:
+      *     Called right after a configuration directive line was read and
+      *     before it is processed. It is mainly intended to be used for
+      *     rewriting directives in order to provide backward compatibility to
+      *     old directive variants.
+      *
+      * new_connection:
+      *     Called from within the internal new_connection() function, right
+      *     after the conn_rec structure for the new established connection was
+      *     created and before Apache starts processing the request with
+      *     ap_read_request().  It is mainly intended to be used to setup/run
+      *     connection dependent things like performing the SSL handshake and
+      *     setting the SSL connection context.
+      */
+ #ifdef ULTRIX_BRAIN_DEATH
+     void  (*add_module) ();
+     void  (*remove_module) ();
+     char *(*rewrite_command) ();
+     void  (*new_connection) ();
+ #else
+     void  (*add_module) (struct module_struct *);
+     void  (*remove_module) (struct module_struct *);
+     char *(*rewrite_command) (cmd_parms *, const char *);
+     void  (*new_connection) (conn_rec *);
+ #endif
+ #endif /* EAPI */
  } module;
  
  /* Initializer for the first few module slots, which are only

#  Now we add the ap_global_ctx variable

Index: src/include/http_conf_globals.h
===================================================================
*** src/include/http_conf_globals.h	1998/09/22 08:42:56	1.1.1.3
--- src/include/http_conf_globals.h	1998/10/29 14:57:52	1.3
***************
*** 86,91 ****
--- 86,94 ----
  extern int ap_listenbacklog;
  extern int ap_dump_settings;
  extern API_VAR_EXPORT int ap_extended_status;
+ #ifdef EAPI
+ extern ap_ctx *ap_global_ctx;
+ #endif /* EAPI */
  
  extern char *ap_pid_fname;
  extern char *ap_scoreboard_fname;

#  Now we just force some configuration defines which are globally required
#  for mod_ssl.

Index: src/include/ap_config.h
===================================================================
*** src/include/ap_config.h	1998/10/07 11:28:10	1.1.1.3
--- src/include/ap_config.h	1998/10/07 11:35:01	1.6
***************
*** 1225,1230 ****
--- 1225,1237 ----
  #define ap_wait_t int
  #endif
  
+ /*
+ **  SSL stuff
+ */
+ #ifdef MOD_SSL
+ #define NO_WRITEV
+ #endif /* MOD_SSL */
+ 
  #ifdef __cplusplus
  }
  #endif

#  Now we just have to add support for the HTTPS protocol scheme.

Index: src/include/httpd.h
===================================================================
*** src/include/httpd.h	1998/10/07 11:28:12	1.1.1.4
--- src/include/httpd.h	1998/10/26 18:20:27	1.9
***************
*** 70,75 ****
--- 70,79 ----
  
  #include "ap_config.h"
  #include "alloc.h"
+ #ifdef EAPI
+ #include "ap_hook.h"
+ #include "ap_ctx.h"
+ #endif
  #include "buff.h"
  #include "ap.h"
  
***************
*** 131,138 ****
--- 135,147 ----
  #define DEFAULT_HTTP_PORT	80
  #define DEFAULT_HTTPS_PORT	443
  #define ap_is_default_port(port,r)	((port) == ap_default_port(r))
+ #ifdef EAPI
+ #define ap_http_method(r)          (ap_ctx_get((r)->connection->client->ctx, "ssl") != NULL ? "https" : "http")
+ #define ap_default_port(r)         (ap_ctx_get((r)->connection->client->ctx, "ssl") != NULL ? DEFAULT_HTTPS_PORT : DEFAULT_HTTP_PORT)
+ #else /* EAPI */
  #define ap_http_method(r)	"http"
  #define ap_default_port(r)	DEFAULT_HTTP_PORT
+ #endif /* EAPI */
  
  /* --------- Default user name and group name running standalone ---------- */
  /* --- These may be specified as numbers by placing a # before a number --- */
***************
*** 421,426 ****
--- 430,438 ----
  API_EXPORT(const char *) ap_get_server_version(void);
  API_EXPORT(void) ap_add_version_component(const char *component);
  API_EXPORT(const char *) ap_get_server_built(void);
+ #ifdef EAPI
+ API_EXPORT(void) ap_add_config_define(const char *define);
+ #endif
  
  /* Numeric release version identifier: major minor bugfix betaseq
   * Always increases along the same track as the source branch.
***************
*** 759,764 ****
--- 771,780 ----
   * binary compatibility for some other reason.
   */
      unsigned expecting_100;     /* is client waiting for a 100 response? */
+ 
+ #ifdef EAPI
+     ap_ctx *ctx;
+ #endif
  };
  
  
***************
*** 803,808 ****
--- 819,828 ----
      signed int double_reverse:2;/* have we done double-reverse DNS?
  				 * -1 yes/failure, 0 not yet, 1 yes/success */
      int keepalives;		/* How many times have we used it? */
+ 
+ #ifdef EAPI
+     ap_ctx *ctx;
+ #endif
  };
  
  /* Per-vhost config... */
***************
*** 875,880 ****
--- 895,904 ----
      int limit_req_line;      /* limit on size of the HTTP request line    */
      int limit_req_fieldsize; /* limit on size of any request header field */
      int limit_req_fields;    /* limit on number of request header fields  */
+ 
+ #ifdef EAPI
+     ap_ctx *ctx;
+ #endif
  };
  
  /* These are more like real hosts than virtual hosts */

#  Now we have to patch the output routines to make sure that SSLeay's
#  output functions are used instead of the standard Unix functions when SSL
#  is enabled.

Index: src/main/buff.c
===================================================================
*** src/main/buff.c	1998/10/07 11:28:14	1.1.1.4
--- src/main/buff.c	1998/10/29 14:58:07	1.9
***************
*** 242,247 ****
--- 242,250 ----
      }
      else
  #endif
+ #ifdef EAPI
+ 	if (!ap_hook_call("ap::buff::read", &rv, fb, buf, nbyte))
+ #endif /* EAPI */
  	rv = read(fb->fd_in, buf, nbyte);
      
      return rv;
***************
*** 253,258 ****
--- 256,264 ----
  
  #if defined (WIN32)
      if (fb->flags & B_SOCKET) {
+ #ifdef EAPI
+ 	if (!ap_hook_call("ap::buff::recvwithtimeout", &rv, fb, buf, nbyte))
+ #endif /* EAPI */
  	rv = recvwithtimeout(fb->fd_in, buf, nbyte, 0);
  	if (rv == SOCKET_ERROR)
  	    errno = WSAGetLastError();
***************
*** 277,282 ****
--- 283,291 ----
      }
      else
  #endif
+ #ifdef EAPI
+ 	if (!ap_hook_call("ap::buff::write", &rv, fb, buf, nbyte))
+ #endif /* EAPI */
  #if defined (B_SFIO)
  	rv = sfwrite(fb->sf_out, buf, nbyte);
  #else
***************
*** 292,297 ****
--- 301,309 ----
  
  #if defined(WIN32)
      if (fb->flags & B_SOCKET) {
+ #ifdef EAPI
+ 	if (!ap_hook_call("ap::buff::sendwithtimeout", &rv, fb, buf, nbyte))
+ #endif /* EAPI */
  	rv = sendwithtimeout(fb->fd, buf, nbyte, 0);
  	if (rv == SOCKET_ERROR)
  	    errno = WSAGetLastError();
***************
*** 365,370 ****
--- 377,386 ----
  		      (size_t) SF_UNBOUND, 0, SF_READ);
      fb->sf_out = sfnew(fb->sf_out, NIL(Void_t *),
  		       (size_t) SF_UNBOUND, 1, SF_WRITE);
+ #endif
+ 
+ #ifdef EAPI
+     fb->ctx = ap_ctx_new(p);
  #endif
  
      return fb;

#  Now we add support for wildcard configuration directive handlers
#  which are used by us to provide backward compatibility to old
#  obsolete directives via on-the-fly mapping.

Index: src/main/http_config.c
===================================================================
*** src/main/http_config.c	1998/10/07 11:28:15	1.1.1.4
--- src/main/http_config.c	1998/10/29 14:58:07	1.4
***************
*** 580,585 ****
--- 580,598 ----
  	m->name = tmp;
      }
  #endif /*_OSD_POSIX*/
+ 
+ #ifdef EAPI
+     /*
+      * Invoke the `add_module' hook inside the now existing set
+      * of modules to let them all now that this module was added.
+      */
+     {
+         module *m2;
+         for (m2 = top_module; m2 != NULL; m2 = m2->next)
+             if (m2->add_module != NULL)
+                 (*m2->add_module)(m);
+     }
+ #endif
  }
  
  /* 
***************
*** 594,599 ****
--- 607,626 ----
  {
      module *modp;
  
+ #ifdef EAPI
+     /*
+      * Invoke the `remove_module' hook inside the now existing
+      * set of modules to let them all now that this module is
+      * beeing removed.
+      */
+     {
+         module *m2;
+         for (m2 = top_module; m2 != NULL; m2 = m2->next)
+             if (m2->remove_module != NULL)
+                 (*m2->remove_module)(m);
+     }
+ #endif
+ 
      modp = top_module;
      if (modp == m) {
  	/* We are the top module, special case */
***************
*** 960,965 ****
--- 987,1011 ----
      const command_rec *cmd;
      module *mod = top_module;
  
+ #ifdef EAPI
+     /*
+      * Invoke the `rewrite_command' of modules to allow
+      * they to rewrite the directive line before we
+      * process it.
+      */
+     {
+         module *m;
+         char *cp;
+         for (m = top_module; m != NULL; m = m->next) {
+             if (m->rewrite_command != NULL) {
+                 cp = (m->rewrite_command)(parms, l);
+                 if (cp != NULL)
+                     l = cp;
+             }
+         }
+     }
+ #endif
+ 
      if ((l[0] == '#') || (!l[0]))
  	return NULL;
  
***************
*** 1319,1324 ****
--- 1365,1374 ----
      s->limit_req_fieldsize = main_server->limit_req_fieldsize;
      s->limit_req_fields = main_server->limit_req_fields;
  
+ #ifdef EAPI
+     s->ctx = ap_ctx_new(p);
+ #endif
+ 
      *ps = s;
  
      return ap_parse_vhost_addrs(p, hostname, s);
***************
*** 1429,1434 ****
--- 1479,1488 ----
  
      s->module_config = create_server_config(p, s);
      s->lookup_defaults = create_default_per_dir_config(p);
+ 
+ #ifdef EAPI
+     s->ctx = ap_ctx_new(p);
+ #endif
  
      return s;
  }

#  Now we have to apply the only really ugly patch for SSL support: Because
#  Apache's API lacks a hook for the socket connection phase we directly have
#  to call a pseudo-API function inside mod_ssl right after a new connection
#  was established to be able to do the initial SSL handshake.

Index: src/main/http_main.c
===================================================================
*** src/main/http_main.c	1998/10/07 11:28:19	1.1.1.4
--- src/main/http_main.c	1998/10/29 14:58:07	1.11
***************
*** 249,254 ****
--- 249,257 ----
  int ap_listenbacklog;
  int ap_dump_settings;
  API_VAR_EXPORT int ap_extended_status = 0;
+ #ifdef EAPI
+ ap_ctx *ap_global_ctx;
+ #endif
  
  /*
   * The max child slot ever assigned, preserved across restarts.  Necessary
***************
*** 413,418 ****
--- 416,431 ----
      }
  }
  
+ #ifdef EAPI
+ API_EXPORT(void) ap_add_config_define(const char *define)
+ {
+     char **var;
+     var = (char **)ap_push_array(ap_server_config_defines);
+     *var = ap_pstrdup(pcommands, define);
+     return;
+ }
+ #endif /* EAPI */
+ 
  static APACHE_TLS int volatile exit_after_unblock = 0;
  
  #ifdef GPROF
***************
*** 2945,2951 ****
--- 2958,2981 ----
      conn->remote_addr = *remaddr;
      conn->remote_ip = ap_pstrdup(conn->pool,
  			      inet_ntoa(conn->remote_addr.sin_addr));
+ #ifdef EAPI
+     conn->ctx = ap_ctx_new(conn->pool);
+ #endif
  
+ #ifdef EAPI
+     /*
+      * Invoke the `new_connection' hook of modules to let them do
+      * some connection dependent actions before we go on with
+      * processing the request on this connection.
+      */
+     {
+         module *m;
+         for (m = top_module; m != NULL; m = m->next)
+             if (m->new_connection != NULL)
+                 (*m->new_connection)(conn);
+     }
+ #endif
+ 
      return conn;
  }
  
***************
*** 3460,3465 ****
--- 3490,3509 ----
      ap_server_pre_read_config  = ap_make_array(pcommands, 1, sizeof(char *));
      ap_server_post_read_config = ap_make_array(pcommands, 1, sizeof(char *));
      ap_server_config_defines   = ap_make_array(pcommands, 1, sizeof(char *));
+ 
+ #ifdef EAPI
+     ap_hook_init();
+     ap_hook_configure("ap::buff::read", 
+                       AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST);
+     ap_hook_configure("ap::buff::write",  
+                       AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST);
+     ap_hook_configure("ap::buff::sendwithtimeout", 
+                       AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST);
+     ap_hook_configure("ap::buff::recvwithtimeout", 
+                       AP_HOOK_SIG4(int,ptr,ptr,int), AP_HOOK_TOPMOST);
+ 
+     ap_global_ctx = ap_ctx_new(NULL);
+ #endif
  }
  
  #ifndef MULTITHREAD

#  Now we add support for ap_ctx

Index: src/main/http_request.c
===================================================================
*** src/main/http_request.c	1998/10/07 11:28:20	1.1.1.4
--- src/main/http_request.c	1998/10/29 14:58:08	1.2
***************
*** 1250,1255 ****
--- 1250,1258 ----
      new->no_cache        = r->no_cache;
      new->no_local_copy   = r->no_local_copy;
      new->read_length     = r->read_length;     /* We can only read it once */
+ #ifdef EAPI
+     new->ctx             = r->ctx;
+ #endif 
  
      ap_table_setn(new->subprocess_env, "REDIRECT_STATUS",
  	ap_psprintf(r->pool, "%d", r->status));

#  Now we add more support for ap_ctx

Index: src/main/http_protocol.c
===================================================================
*** src/main/http_protocol.c	1998/10/07 11:28:20	1.1.1.4
--- src/main/http_protocol.c	1998/10/30 16:06:03	1.3
***************
*** 821,826 ****
--- 821,830 ----
      r->status          = HTTP_REQUEST_TIME_OUT;  /* Until we get a request */
      r->the_request     = NULL;
  
+ #ifdef EAPI
+     r->ctx = ap_ctx_new(r->pool);
+ #endif
+ 
  #ifdef CHARSET_EBCDIC
      ap_bsetflag(r->connection->client, B_ASCII2EBCDIC|B_EBCDIC2ASCII, 1);
  #endif
***************
*** 970,975 ****
--- 974,984 ----
      rnew->read_body       = REQUEST_NO_BODY;
  
      rnew->main = (request_rec *) r;
+ 
+ #ifdef EAPI
+     rnew->ctx = r->ctx;
+ #endif
+ 
  }
  
  void ap_finalize_sub_req_protocol(request_rec *sub)

#  Now we have to make sure that a des_encrypt() function prototype inside
#  the vendor <crypt.h> header file doesn't conflict with the one from
#  SSLeay. Because des_encrypt() is not used inside Apache we just move the
#  prototype away overriding the name with a define.

Index: src/modules/standard/mod_auth.c
===================================================================
*** src/modules/standard/mod_auth.c	1998/10/07 11:28:32	1.1.1.4
--- src/modules/standard/mod_auth.c	1998/10/07 11:35:02	1.5
***************
*** 75,81 ****
--- 75,87 ----
  #include "http_log.h"
  #include "http_protocol.h"
  #if defined(HAVE_CRYPT_H)
+ #if defined(MOD_SSL)
+ #define des_encrypt MOVE_AWAY_des_encrypt
  #include <crypt.h>
+ #undef des_encrypt
+ #else
+ #include <crypt.h>
+ #endif /* MOD_SSL */
  #endif
  
  typedef struct auth_config_struct {

#  Now we add additional %{xxx}c tags to the CustomLog directive which can
#  be used to create an own SSL logfile. That's just for convenience.

Index: src/modules/standard/mod_log_config.c
===================================================================
*** src/modules/standard/mod_log_config.c	1998/10/07 11:28:35	1.1.1.4
--- src/modules/standard/mod_log_config.c	1998/10/29 14:59:37	1.13
***************
*** 420,425 ****
--- 420,439 ----
      return ap_psprintf(r->pool, "%ld", (long) getpid());
  }
  
+ #ifdef EAPI
+ static const char *log_ext_var(request_rec *r, char *a)
+ {
+     char *result;
+ 
+     result = NULL;
+     ap_hook_use("ap::log_config::expand_x_variable",
+                 AP_HOOK_SIG3(ptr,ptr,ptr),
+                 AP_HOOK_DECLINE(NULL),
+                 &result, r, a);
+     return result;
+ }
+ #endif
+ 
  /*****************************************************************
   *
   * Parsing the log format string
***************
*** 485,504 ****
--- 499,547 ----
      {
          'P', log_child_pid, 0
      },
+ #ifdef EAPI
      {
+         'x', log_ext_var, 0
+     },
+ #endif
+     {
          '\0'
      }
  };
  
+ #ifdef EAPI
+ static struct log_item_list *find_log_func(pool *p, char k)
+ #else
  static struct log_item_list *find_log_func(char k)
+ #endif
  {
      int i;
+ #ifdef EAPI
+     struct log_item_list *lil;
+ 	void *func;
+ #endif
  
      for (i = 0; log_item_keys[i].ch; ++i)
          if (k == log_item_keys[i].ch) {
              return &log_item_keys[i];
          }
  
+ #ifdef EAPI
+     func = NULL;
+     if (ap_hook_use("ap::log_config::register_function", 
+                     AP_HOOK_SIG2(ptr,char),
+                     AP_HOOK_DECLINE(NULL),
+                     &func, k) && func != NULL) {
+         lil = (struct log_item_list *)ap_pcalloc(p, sizeof(struct log_item_list));
+         if (lil == NULL)
+             return NULL;
+         lil->ch = k;
+         lil->func = func;
+         lil->want_orig_default = 0;
+         return lil;
+     }
+ #endif
+ 
      return NULL;
  }
  
***************
*** 593,599 ****
--- 636,646 ----
              break;
  
          default:
+ #ifdef EAPI
+             l = find_log_func(p, *s++);
+ #else
              l = find_log_func(*s++);
+ #endif
              if (!l) {
                  char dummy[2];
  

#  Now we add support for HTTPS to the proxy module. Because we want
#  to avoid redundancy instead of creating an own proxy_https.c we
#  enhance proxy_http.c so it now handles HTTP and HTTPS. Because
#  the difference is minimal. First in mod_proxy.h we just adjust
#  the prototype of the HTTP handler because it now uses a flag
#  for HTTP/HTTPS.

Index: src/modules/proxy/mod_proxy.h
===================================================================
*** src/modules/proxy/mod_proxy.h	1998/09/22 08:43:11	1.1.1.3
--- src/modules/proxy/mod_proxy.h	1998/09/23 14:29:04	1.4
***************
*** 281,288 ****
--- 281,297 ----
  
  int ap_proxy_http_canon(request_rec *r, char *url, const char *scheme,
  		     int def_port);
+ #ifdef MOD_SSL
  int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
+                           const char *proxyhost, int proxyport);
+ int ap_proxy_https_handler(request_rec *r, cache_req *c, char *url,
+                           const char *proxyhost, int proxyport);
+ int ap_proxy_http_handler_internal(request_rec *r, cache_req *c, char *url,
+                           const char *proxyhost, int proxyport, int use_ssl);
+ #else
+ int ap_proxy_http_handler(request_rec *r, cache_req *c, char *url,
  		       const char *proxyhost, int proxyport);
+ #endif
  
  /* proxy_util.c */
  

#  Then we recognize HTTPS and use this new flag when calling the 
#  combined HTTP/HTTPS handler.

Index: src/modules/proxy/mod_proxy.c
===================================================================
*** src/modules/proxy/mod_proxy.c	1998/09/22 08:43:11	1.1.1.3
--- src/modules/proxy/mod_proxy.c	1998/10/29 14:59:28	1.5
***************
*** 214,219 ****
--- 214,222 ----
  static int proxy_fixup(request_rec *r)
  {
      char *url, *p;
+ #ifdef EAPI
+     int rc;
+ #endif
  
      if (!r->proxyreq || strncmp(r->filename, "proxy:", 6) != 0)
  	return DECLINED;
***************
*** 221,226 ****
--- 224,237 ----
      url = &r->filename[6];
  
  /* canonicalise each specific scheme */
+ #ifdef EAPI
+     if (ap_hook_use("ap::proxy::canon",
+                     AP_HOOK_SIG3(int,ptr,ptr),
+                     AP_HOOK_DECLINE(DECLINED),
+                     &rc, r, url) && rc != DECLINED)
+         return rc;  
+     else
+ #endif
      if (strncasecmp(url, "http:", 5) == 0)
  	return ap_proxy_http_canon(r, url + 5, "http", DEFAULT_HTTP_PORT);
      else if (strncasecmp(url, "ftp:", 4) == 0)
***************
*** 236,241 ****
--- 247,276 ----
  static void proxy_init(server_rec *r, pool *p)
  {
      ap_proxy_garbage_init(r, p);
+ 
+ #ifdef EAPI
+     /* 
+      * export: ap_proxy_http_canon() as `ap::proxy::http::canon'
+      */
+     ap_hook_configure("ap::proxy::http::canon", 
+                       AP_HOOK_SIG5(int,ptr,ptr,ptr,int), AP_HOOK_TOPMOST);
+     ap_hook_register("ap::proxy::http::canon", 
+                      ap_proxy_http_canon, AP_HOOK_NOCTX);
+     /* 
+      * export: ap_proxy_http_handler() as `ap::proxy::http::handler'
+      */
+     ap_hook_configure("ap::proxy::http::handler", 
+                       AP_HOOK_SIG6(int,ptr,ptr,ptr,ptr,int), AP_HOOK_TOPMOST);
+     ap_hook_register("ap::proxy::http::handler", 
+                      ap_proxy_http_handler, AP_HOOK_NOCTX);
+     /* 
+      * export: ap_proxyerror() as `ap::proxy::error'
+      */
+     ap_hook_configure("ap::proxy::error", 
+                       AP_HOOK_SIG3(int,ptr,ptr), AP_HOOK_TOPMOST);
+     ap_hook_register("ap::proxy::error", 
+                      ap_proxyerror, AP_HOOK_NOCTX);
+ #endif
  }
  
  
***************
*** 368,373 ****
--- 403,418 ----
  		/* CONNECT is a special method that bypasses the normal
  		 * proxy code.
  		 */
+ #ifdef EAPI
+ 		if (ap_hook_use("ap::proxy::handler",
+ 				AP_HOOK_SIG7(int,ptr,ptr,ptr,ptr,int,ptr),
+ 				AP_HOOK_DECLINE(DECLINED),
+ 				&rc, r, cr, url, 
+ 				ents[i].hostname, ents[i].port, 
+ 				ents[i].protocol) && rc != DECLINED)
+ 		    rc = rc;
+ 		else
+ #endif
  		if (r->method_number == M_CONNECT)
  		    rc = ap_proxy_connect_handler(r, cr, url, ents[i].hostname,
  					       ents[i].port);
***************
*** 390,395 ****
--- 435,448 ----
   * give up??
   */
      /* handle the scheme */
+ #ifdef EAPI
+     if (ap_hook_use("ap::proxy::handler",
+ 		    AP_HOOK_SIG7(int,ptr,ptr,ptr,ptr,int,ptr),
+ 		    AP_HOOK_DECLINE(DECLINED),
+ 		    &rc, r, cr, url, 
+                     NULL, 0, scheme) && rc != DECLINED)
+         return rc;
+ #endif
      if (r->method_number == M_CONNECT)
  	return ap_proxy_connect_handler(r, cr, url, NULL, 0);
      if (strcasecmp(scheme, "http") == 0)

#  And finally we have to add the SSL functionality to the
#  HTTP handler to let him speak HTTPS, too.

Index: src/modules/proxy/proxy_http.c
===================================================================
*** src/modules/proxy/proxy_http.c	1998/09/22 08:43:13	1.1.1.3
--- src/modules/proxy/proxy_http.c	1998/10/30 16:06:26	1.7
***************
*** 206,211 ****
--- 206,217 ----
  	return HTTP_BAD_REQUEST;
      urlptr += 3;
      destport = DEFAULT_HTTP_PORT;
+ #ifdef EAPI
+     ap_hook_use("ap::proxy::http::handler::set_destport", 
+                 AP_HOOK_SIG2(int,ptr), 
+                 AP_HOOK_TOPMOST,
+                 &destport, r);
+ #endif
      strp = strchr(urlptr, '/');
      if (strp == NULL) {
  	desthost = ap_pstrdup(p, urlptr);
***************
*** 301,313 ****
--- 307,347 ----
      f = ap_bcreate(p, B_RDWR | B_SOCKET);
      ap_bpushfd(f, sock, sock);
  
+ #ifdef EAPI
+     {
+         char *errmsg = NULL;
+         ap_hook_use("ap::proxy::http::handler::new_connection", 
+                     AP_HOOK_SIG3(ptr,ptr,ptr), 
+                     AP_HOOK_DECLINE(NULL),
+                     &errmsg, r, f);
+         if (errmsg != NULL)
+             return ap_proxyerror(r, errmsg);
+     }
+ #endif
+ 
      ap_hard_timeout("proxy send", r);
      ap_bvputs(f, r->method, " ", proxyhost ? url : urlptr, " HTTP/1.0" CRLF,
  	   NULL);
+ #ifdef EAPI
+     {
+ 	int rc = DECLINED;
+ 	ap_hook_use("ap::proxy::http::handler::write_host_header", 
+ 		    AP_HOOK_SIG6(int,ptr,ptr,ptr,int,ptr), 
+ 		    AP_HOOK_DECLINE(DECLINED),
+ 		    &rc, r, f, desthost, destport, destportstr);
+         if (rc == DECLINED) {
+ 	    if (destportstr != NULL && destport != DEFAULT_HTTP_PORT)
+ 		ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL);
+ 	    else
+ 		ap_bvputs(f, "Host: ", desthost, CRLF, NULL);
+         }
+     }
+ #else
      if (destportstr != NULL && destport != DEFAULT_HTTP_PORT)
  	ap_bvputs(f, "Host: ", desthost, ":", destportstr, CRLF, NULL);
      else
  	ap_bvputs(f, "Host: ", desthost, CRLF, NULL);
+ #endif
  
      if (conf->viaopt == via_block) {
  	/* Block all outgoing Via: headers */

#  And now additionally patch the pre-generated modules.c file
#  for the Win32 port.

Index: src/os/win32/modules.c
===================================================================
*** src/os/win32/modules.c	1998/09/22 08:43:36	1.1.1.2
--- src/os/win32/modules.c	1998/10/06 06:53:09	1.2
***************
*** 25,30 ****
--- 25,31 ----
  extern module action_module;
  extern module setenvif_module;
  extern module isapi_module;
+ extern module ssl_module;
  
  module *ap_prelinked_modules[] = {
    &core_module,
***************
*** 46,51 ****
--- 47,53 ----
    &action_module,
    &setenvif_module,
    &isapi_module,
+   &ssl_module,
    NULL
  };
  module *ap_preloaded_modules[] = {
***************
*** 68,72 ****
--- 70,75 ----
    &action_module,
    &setenvif_module,
    &isapi_module,
+   &ssl_module,
    NULL
  };

#  Add build support for the additional ca-fix utility.

Index: src/support/Makefile.tmpl
===================================================================
*** src/support/Makefile.tmpl	1998/09/22 08:43:45	1.1.1.3
--- src/support/Makefile.tmpl	1998/10/25 15:11:24	1.3
***************
*** 40,45 ****
--- 40,48 ----
  suexec: suexec.o
  	$(CC) $(CFLAGS) suexec.o -o suexec $(LDFLAGS) $(LIBS)
  
+ ca-fix: ca-fix.o
+ 	$(CC) $(CFLAGS) ca-fix.o -o ca-fix $(LDFLAGS) $(LIBS) $(SSL_LDFLAGS) $(SSL_LIBS)
+ 
  clean:
  	rm -f $(TARGETS) *.o
  

#  Now we provide an additional `startssl' command to supplement the
#  standard `start' command. The difference is just that `startssl' adds a
#  -DSSL define when starting httpd.

Index: src/support/apachectl
===================================================================
*** src/support/apachectl	1998/07/21 18:50:07	1.1.1.2
--- src/support/apachectl	1998/09/16 11:44:10	1.4
***************
*** 75,80 ****
--- 75,92 ----
  	    ERROR=3
  	fi
  	;;
+     startssl|sslstart|start-SSL)
+ 	if [ $RUNNING -eq 1 ]; then
+ 	    echo "$0 $ARG: httpd (pid $PID) already running"
+ 	    continue
+ 	fi
+ 	if $HTTPD -DSSL; then
+ 	    echo "$0 $ARG: httpd started"
+ 	else
+ 	    echo "$0 $ARG: httpd could not be started"
+ 	    ERROR=3
+ 	fi
+ 	;;
      stop)
  	if [ $RUNNING -eq 0 ]; then
  	    echo "$0 $ARG: $STATUS"
***************
*** 153,158 ****
--- 165,171 ----
  	cat <<EOF
  
  start      - start httpd
+ startssl   - start httpd with SSL enabled
  stop       - stop httpd
  restart    - restart httpd if running by sending a SIGHUP or start if 
               not running

#  Now we have to add support for the HTTPS scheme and the additional
#  SSL_XXXX environment variables mod_ssl provides to the CGI scripts.

Index: src/support/suexec.c
===================================================================
*** src/support/suexec.c	1998/09/22 08:43:50	1.1.1.3
--- src/support/suexec.c	1998/09/22 08:59:06	1.3
***************
*** 214,220 ****
--- 214,226 ----
      cidx++;
  
      for (ep = environ; *ep && cidx < AP_ENVBUF-1; ep++) {
+ #ifdef MOD_SSL
+ 	if (!strncmp(*ep, "HTTP_", 5) || 
+ 	    !strncmp(*ep, "HTTPS", 5) ||
+ 	    !strncmp(*ep, "SSL_", 4)) {
+ #else
  	if (!strncmp(*ep, "HTTP_", 5)) {
+ #endif
  	    cleanenv[cidx] = *ep;
  	    cidx++;
  	}

#  Now we add additional SSL configuration directives. Actually
#  a virtual server is configured for Port 443 which speaks SSL.

Index: conf/httpd.conf-dist
===================================================================
*** conf/httpd.conf-dist	1998/10/07 11:28:57	1.1.1.3
--- conf/httpd.conf-dist	1998/10/07 11:35:01	1.21
***************
*** 31,36 ****
--- 31,47 ----
  
  Port 80
  
+ ##
+ ##  SSL Support
+ ##
+ ##  When we also provide SSL we have to listen to the 
+ ##  standard HTTP port (see above) and to the HTTPS port
+ ##
+ <IfDefine SSL>
+ Listen 80
+ Listen 443
+ </IfDefine>
+ 
  # HostnameLookups: Log the names of clients or just their IP numbers
  #   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
***************
*** 266,269 ****
--- 277,411 ----
  #TransferLog logs/host.some_domain.com-access_log
  #</VirtualHost>
  
+ 
+ ##
+ ##  SSL Support
+ ##
+ ##  Note that all SSL options can apply to virtual hosts, which is
+ ##  where we are going to put them. Per default SSL is disabled
+ ##  globally and you have to enable it inside virtual hosts
+ ##  explicitly.
+ ##
+ 
+ <IfModule mod_ssl.c>
+ 
+ #   Configure the pass phrase gathering process. [RECOMMENDED]
+ #   The filtering dialog program (`builtin' is a internal
+ #   terminal dialog) has to provide the pass phrase on stdout.
+ SSLPassPhraseDialog   builtin
+ 
+ #   Configure the path to the mutial explusion lockfile the
+ #   SSL engine uses internally for syncronization. [RECOMMENDED]
+ SSLMutex  file:logs/ssl_mutex
+ 
+ #   Configure the SSL Session Cache: First either `none'
+ #   or `dbm:/path/to/file' for the mechanism to use and
+ #   second the expiring timeout (in seconds). [RECOMMENDED].
+ SSLSessionCache         dbm:logs/ssl_scache
+ SSLSessionCacheTimeout  300
+ 
+ #   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).
+ #   [RECOMMENDED]
+ #   Log levels are (ascending order: higher ones include lower ones):
+ #   none:  no dedicated SSL logging at all, but errors are still 
+ #          duplicated to the Apache error log.
+ #   error: log error messages (plus duplicate them to the error log)
+ #   warn:  log warning messages
+ #   info:  log information messages
+ #   debug: log debugging messages
+ SSLLog      logs/ssl_engine_log
+ SSLLogLevel info
+ 
+ <IfDefine SSL>
+ 
+ <VirtualHost _default_:443>
+ 
+ #   Setup the general virtual host configuration.
+ DocumentRoot @@ServerRoot@@/htdocs
+ ServerName new.host.name
+ ServerAdmin you@your.address
+ ErrorLog logs/error_log
+ TransferLog logs/access_log
+ 
+ #   Enable SSL for this virtual host.
+ SSLEngine on
+ 
+ #   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. [RECOMMENDED]
+ SSLCertificateFile    @@ServerRoot@@/conf/ssl.crt/server.crt
+ 
+ #   If the key is not combined with the certificate, use this
+ #   directive to point at the key file. [OPTIONAL]
+ SSLCertificateKeyFile @@ServerRoot@@/conf/ssl.key/server.key
+ 
+ #   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)
+ #   [OPTIONAL]
+ #   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
+ 
+ #   Set the file containing CA certificates which are sent to the
+ #   client on an `SSLv3 write certificate request A'. This is
+ #   used with SSLv3 certificate chaining where the client loads
+ #   intermediate certificates in the chain from the server to
+ #   speedup processing of the server authentication. This
+ #   defaults to SSLCACertificateFile but can be set to a
+ #   different file when you want to use a different set of
+ #   certificates you sent out to the client.
+ #SSLCACertificateReqFile @@ServerRoot@@/conf/ssl.crt/ca-bundle.crt
+ 
+ #   Set client verification level: [RECOMMENDED]
+ #   none:           no certificate is required
+ #   optional:       the client may  present a valid certificate
+ #   require:        the client must present a valid certificate
+ #   optional_no_ca: the client may  present a valid certificate 
+ #                   but it is not required to have a valid CA
+ SSLVerifyClient none
+ 
+ #   Set how deeply to verify the certificate issuer chain before
+ #   deciding the certificate is not valid. [OPTIONAL]
+ #SSLVerifyDepth 10
+ 
+ #   List the ciphers that the client is permitted to negotiate.
+ #   See the mod_ssl documentation for a complete list. [OPTIONAL]
+ #SSLCipherSuite RC4-MD5:RC4-SHA:IDEA-CBC-MD5:DES-CBC3-SHA
+ 
+ #   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'. [OPTIONAL]
+ #SSLFakeBasicAuth
+ 
+ #   With SSLRequire you can do 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.
+ #SSLRequire %{SSL_CIPHER} !~ m/^EXP-.*/ and \
+ #           %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." and \
+ #           %{REMOTE_ADDR} =~ m/^1\.2\.3\.[0-9]+$/
+ 
+ #   The home of a custom SSL log file. [RECOMMENED]
+ #   (Use this when you want a compact non-error SSL logfile
+ #   on a virtual host basis)
+ CustomLog logs/ssl_request_log \
+           "%t %h %{version}c %{cipher}c \"%r\" %b %{subjectdn}c %{issuerdn}c"
+ 
+ </VirtualHost>                                  
+ 
+ </IfDefine>
+ 
+ </IfModule>
  

#  Now we adjust the default frontdoor webpage where we now indicate that
#  this is an SSL-aware Apache, give additional hyperlinks to mod_ssl and
#  provide the three new "powered by Apache", "secured by mod_ssl" and
#  "includes SSLeay" buttons.

Index: htdocs/index.html
===================================================================
*** htdocs/index.html	1998/07/21 18:45:50	1.1.1.1
--- htdocs/index.html	1998/08/20 12:30:58	1.2
***************
*** 1,7 ****
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
!   <TITLE>Test Page for Apache Installation on Web Site</TITLE>
   </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
--- 1,17 ----
  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  <HTML>
   <HEAD>
!   <TITLE>Test Page for the SSL-aware Apache Installation on Web Site</TITLE>
!   <STYLE TYPE="text/css">
!   H1 {
!       font-weight: bold;
!       font-size: 18pt;
!       line-height: 18pt;
!       font-family: arial,helvetica;
!       font-variant: normal;
!       font-style: normal;
!   }
!   </STYLE>
   </HEAD>
  <!-- Background white, links blue (unvisited), navy (visited), red (active) -->
   <BODY
***************
*** 11,51 ****
    VLINK="#000080"
    ALINK="#FF0000"
   >
!   <H1 ALIGN="CENTER">
!    It Worked!  The Apache Web Server is Installed on this Web Site!
    </H1>
    <P>
    If you can see this page, then the people who own this domain have just
    installed the <A HREF="http://www.apache.org/">Apache Web server</A>
!   software successfully.  They now have to add content to this directory
!   and replace this placeholder page, or else point the server at their real
!   content.
    </P>
-   <HR>
    <BLOCKQUOTE>
     If you are seeing this page instead of the site you expected, please
     <STRONG>contact the administrator of the site involved.</STRONG>
!    (Try sending mail to <SAMP>&lt;Webmaster@<EM>domain</EM>&gt;</SAMP>.)
     Although this site is
     running the Apache software it almost certainly has no other connection
     to the Apache Group, so please do not send mail about this site or its
     contents to the Apache authors.  If you do, your message will be
!    <STRONG><BIG>ignored</BIG></STRONG>.
    </BLOCKQUOTE>
-   <HR>
    <P>
    The Apache
    <A
     HREF="manual/index.html"
    >documentation</A>
!   has been included with this distribution.
    </P>
    <P>
!   The Webmaster of this site is 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>
--- 21,82 ----
    VLINK="#000080"
    ALINK="#FF0000"
   >
!   <BLOCKQUOTE>
!   <BR>
!   <H1>
!   It Worked!<BR>
!   The SSL-aware Apache Web Server is Installed on this Web Site.
    </H1>
    <P>
+   <HR NOSHADE>
+   <P>
    If you can see this page, then the people who own this domain have just
    installed the <A HREF="http://www.apache.org/">Apache Web server</A>
!   software and <A HREF="http://www.engelschall.com/sw/mod_ssl/">Apache
!   Interface to SSLeay (mod_ssl)</A> successfully.  They now have to add
!   content to this directory and replace this placeholder page, or else point
!   the server at their real content.
    </P>
    <BLOCKQUOTE>
+    <STRONG>ATTENTION!</STRONG><BR>
     If you are seeing this page instead of the site you expected, please
     <STRONG>contact the administrator of the site involved.</STRONG>
!    (Try sending mail to <SAMP>&lt;webmaster@<EM>domain</EM>&gt;</SAMP>.)
     Although this site is
     running the Apache software it almost certainly has no other connection
     to the Apache Group, so please do not send mail about this site or its
     contents to the Apache authors.  If you do, your message will be
!    <STRONG>ignored</STRONG>.
    </BLOCKQUOTE>
    <P>
    The Apache
    <A
     HREF="manual/index.html"
    >documentation</A>
!   has been included with this distribution.<BR>
!   Especially read the 
!   <A
!    HREF="manual/mod/mod_ssl.html"
!   >SSL documentation</A>
!   carefully.
    </P>
    <P>
!   The Webmaster of this site is free to use the images below on
!   an SSL-aware Apache Web server. <BR>
!   Thanks for using Apache!
    </P>
+   <HR NOSHADE>
+   <P>
    <DIV ALIGN="CENTER">
!    <A HREF="http://www.apache.org/"
!    ><IMG SRC="manual/images/apache_pb.gif" ALT="Apache Webserver" BORDER=0></A>
!    &nbsp;
!    <A HREF="http://www.engelschall.com/sw/mod_ssl/"
!    ><IMG SRC="manual/images/mod_ssl_sb.gif" ALT="mod_ssl Interface" BORDER=0></A>
!    &nbsp;
!    <A HREF="http://www.ssleay.org/"
!    ><IMG SRC="manual/images/ssleay.gif" ALT="SSLeay Library" BORDER=0></A>
    </DIV>
+   </BLOCKQUOTE>
   </BODY>
  </HTML>

#  Now we just add a hyperlink to the mod_ssl.html document.

Index: htdocs/manual/mod/index.html
===================================================================
*** htdocs/manual/mod/index.html	1998/07/21 18:45:52	1.1.1.1
--- htdocs/manual/mod/index.html	1998/09/10 11:21:42	1.4
***************
*** 111,116 ****
--- 111,118 ----
  <DD>Experimental support for loading modules (DLLs on Windows) at runtime
  <DT><A HREF="mod_speling.html">mod_speling</A> Apache 1.3 and up
  <DD>Automatically correct minor typos in URLs
+ <DT><A HREF="mod_ssl.html">mod_ssl</A> Apache 1.3 with mod_ssl applied
+ <DD>Apache SSL interface to SSLeay
  <DT><A HREF="mod_status.html">mod_status</A>
  <DD>Server status display
  <DT><A HREF="mod_userdir.html">mod_userdir</A>

#  Now we just add hyperlinks for all directives which are
#  documented inside the mod_ssl.html document.

Index: htdocs/manual/mod/directives.html
===================================================================
*** htdocs/manual/mod/directives.html	1998/09/22 08:44:03	1.1.1.3
--- htdocs/manual/mod/directives.html	1998/09/22 08:51:54	1.9
***************
*** 206,211 ****
--- 206,229 ----
  <LI><A HREF="mod_setenvif.html#setenvif">SetEnvIf</A>
  <LI><A HREF="mod_setenvif.html#SetEnvIfNoCase">SetEnvIfNoCase</A>
  <LI><A HREF="mod_mime.html#sethandler">SetHandler</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLMutex">SSLMutex</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLPassPhraseDialog">SSLPassPhraseDialog</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLEngine">SSLEngine</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCipherList">SSLCipherList</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCertificateFile">SSLCertificateFile</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCertificateKeyFile">SSLCertificateKeyFile</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCACertificatePath">SSLCACertificatePath</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCACertificateFile">SSLCACertificateFile</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLCACertificateReqFile">SSLCACertificateReqFile</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLVerifyClient">SSLVerifyClient</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLVerifyDepth">SSLVerifyDepth</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLSessionCacheStorage">SSLSessionCacheStorage</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLSessionCacheTimeout">SSLSessionCacheTimeout</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLFakeBasicAuth">SSLFakeBasicAuth</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLLog">SSLLog</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLLogLevel">SSLLogLevel</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLRequireSSL">SSLRequireSSL</A>
+ <LI><A HREF="mod_ssl_ref.html#SSLRequire">SSLRequire</A>
  <LI><A HREF="core.html#startservers">StartServers</A>
  <LI><A HREF="core.html#threadsperchild">ThreadsPerChild</A>
  <LI><A HREF="core.html#timeout">TimeOut</A>
