httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dirk-Willem van Gulik <di...@webweaving.org>
Subject Re: [PATCH] TPF changes
Date Tue, 27 Jul 1999 18:29:12 GMT

Good stuff.

Dw.

On Tue, 27 Jul 1999, David McCreedy wrote:

> Here is a proposed patch to various Apache files for IBM's TPF operating
> system.
> The changes should affect TPF only, with two exceptions: debug.c and
> rfc1413.c:
> Apache/src/regex/debug.c was changed for all platforms to fix an
> undefined reference to the ap_isprintf function.
> Apache/src/main/rfc1413.c was changed for EBCDIC platforms (TPF and
> BS2000) to correctly deal with ASCII/EBCDIC conversions.
> 
> David McCreedy
> McCreedy@us.ibm.com
> 
> Index: apache/htdocs/manual/install-tpf.html
> ===================================================================
> RCS file: /apache/apache/htdocs/manual/install-tpf.html,v
> retrieving revision 1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1 -r1.2
> --- install-tpf.html 1999/07/21 22:00:39 1.1
> +++ install-tpf.html 1999/07/21 22:06:48 1.2
> @@ -9,7 +9,7 @@
>   <A NAME="top">Installing the Apache 1.3 HTTP Server on TPF</A>
>  </H1>
>  <HR>
> -<CENTER>[&nbsp;<A HREF="#setup">Setup</A>
> +<CENTER>[&nbsp;<A HREF="#download">Download</A>
>     &nbsp;|&nbsp;<A HREF="#compilation">Compilation</A>
>     &nbsp;|&nbsp;<A HREF="#installation">Installation</A>
>     &nbsp;|&nbsp;<A HREF="#visualage">VisualAge</A>&nbsp;]
> @@ -26,53 +26,68 @@
>  for basic information on the port of Apache to TPF including required
> PUT level
>  and supported functions &amp; modules.
>  </P>
> -
> -<H2 align=center><A NAME="setup">Setup</A></H2>
> -<P>
> -Due to the use of EBCDIC on MVS OS/390 Open Edition
> -(later referred to simply as
> -"Open Edition"), we've found that the most reliable
> -method for loading Apache onto your system is to unzip and tar the
> distribution
> -file on your PC, and then copy the extracted files to Open Edition
> -via an NFS client
> -capable of transferring the data in EBCDIC format.
> -</P>
> -<P>
> -Before moving the distribution to an
> -Open Edition environment, verify that the NFS drive will transfer the
> -filenames with upper/lower case preserved.
> -</P>
> -<P>
> -Since Open Edition is not the ultimate destination of the files,
> -the only required files and subdirectories that need to be moved to
> -Open Edition
> -are in /src.
> -</P>
> -<P>
> -<FONT COLOR=red><STRONG>WARNING</STRONG></FONT>:
> -If you are using a product such as WinZip on your PC, verify that
> -the <EM>"TAR File Smart CR/LF Conversion"</EM> option is NOT checked.
> -You can find this in WinZip under Options, Configuration.
> -This will save you lots of headaches later on.
> -</P>
> -<P>
> -<FONT COLOR=red><STRONG>WARNING</STRONG></FONT>:
> -Editing files on a PC before moving them to Open Edition may result
> -in the loss/addition of unprintable characters.  Files of concern
> include shell
> -scripts and src/Configuration.  The most common problems are with
> -tab characters
> -and CR/LF characters.  Most editors will handle the CR/LF problem
> correctly
> -but none seem to handle tab characters.  If you need to edit files,
> edit them
> -in a UNIX editor such as vi or emacs.
> -</P>
> -
> +<H2 align=center><A NAME="download">Download</A></H2>
> +Releases of the Apache server are compressed into a "tarball" file and
> stored on the Apache web site.
> +You will need to choose a version and download the corresponding
> tarball to your PC.
> +Additionally the source code from the tarball will need to be copied
> onto an MVS OS/390 Open Edition machine
> +(later referred to simply as "Open Edition") for compiling.
> +So here are all the details on how to get Apache and how to get it
> where it needs to be:
> +<ol>
> +   <li><A HREF="http://www.apache.org/dist/">Download</A>
> +       the gzipped Apache files (the "tarball") to your PC.
> +       The file name on the web site will be something like
> <i>apache_1.3.x.tar.gz</i>.
> +       <br><font color=red size=4>TIP: </font>Be sure to keep the
> <i>.tar.gz</i> extension
> +           when choosing the name of the PC file.
> +       <br><br>
> +   <li>Decompress the tarball on your PC using WinZip or some other PC
> decompression tool.
> +       <br><font color=red size=4>TIP: </font>If you are using WinZip
> verify that the
> +            <EM>"TAR File Smart CR/LF Conversion"</EM> option (under
> Options, Configuration) is NOT checked.<br>
> +            This is what you can expect if you use WinZip:
> +       <ul>
> +           <li>open the tarball with WinZip (this can usually be done
> simply by double-clicking
> +               on the downloaded tarball)
> +           <li>you will be told that the archive contains one file
> (such as <i>apache_1.3.x.tar</i>) -
> +               allow WinZip to decompress it to a temporary folder
> +           <li>extract the archived files onto your PC -
> +               you'll be using files from the <tt>conf, htdocs,</tt>
> and <tt>icons</tt> directories later in the install phase
> +       </ul>
> +       <br>
> +   <li>FTP the tarball to your Open Edition machine using binary mode:
> +       <ul>
> +           <li>activate FTP in an MSDOS window: <tt><b>ftp
> <i>your.open.edition.machine.com</i></b></tt>
> +           <li>sign in
> +           <li>set mode to binary: <tt><b>binary</b></tt>
> +           <li>send the file to Open Edition:<br>
> +               <tt><b>&nbsp;&nbsp;&nbsp;send
> <i>c:\downloaded_filename.tar.gz
> open_edition_filename.tar.gz</i></b></tt>
> +           <li>exit FTP: <tt><b>bye</b></tt>
> +       </ul>
> +       <br><font color=red size=4>TIP: </font>
> +        Open Edition and UNIX file names are case sensitive.  If you
> use an NFS client to transfer files
> +        from your PC to Open Edition (instead of using FTP as described
> above) verify that the NFS drive will transfer the
> +        file names with upper/lower case preserved.<br>
> +       <br>
> +   <li>Decompress the gzipped file on Open Edition: <tt><b>gunzip
> <i>open_edition_filename.tar.gz</i></b></tt>
> +       <br>Note that the <i>.tar.gz</i> file will be replaced by the
> gunzipped <i>.tar</i> archive file.
> +       <br><br>
> +   <li>Extract the archived files necessary for compiling Apache:
> +       <ul>
> +           <li><tt><b>pax -rvkf <i>open_edition_filename.tar</i> -o
> from=ISO8859-1,to=IBM-1047 "*/src"</b></tt>
> +           <li>switch to the source code subdirectory of the newly
> extracted apache directory: <tt><b>cd <i>apache-1.3</i>/src</b></tt>
> +           <li>remove various subdirectories: <tt><b>rm -r
> lib/expat-lite os/bs2000 os/os2 os/win32</b></tt>
> +               <br><BR><font color=red size=4>TIP: </font>
> +               The &quot;<tt>make</tt>&quot; step (shown below) will
> fail if the
> +               <tt>lib/expat-lite</tt> directory is not removed.
> +              <br>
> +       </ul>
> +</ol>
> +<br>
>  <H2 align=center><A NAME="compilation">Compilation</A></H2>
>  <P>
>  Apache supports the notion of "optional modules".  However,
>  the server has to know which modules are compiled into it.  In order
> for
>  those modules to be effective, it is necessary to generate a short bit
> of
> -code ("modules.c") which simply has a list of them. If you are using
> the
> -make and Configure utility, "modules.c" will be created for you.
> +code (modules.c) which simply has a list of them. If you are using the
> <tt>Configure</tt> utility
> +and <tt>make</tt>, modules.c and other necessary files will be created
> for you automatically.
>  </P>
>  <P>
>  The provided scripts assume a c89 compiler and have only been tested on
> an
> @@ -80,8 +95,15 @@
>  Open Edition you may need to modify src/os/tpf/TPFExport and
> src/Configure
>  to match your environment.
>  </P>
> +<font color=red size=4>TIP: </font>
> +Editing files on your PC prior to moving them to Open Edition may
> result
> +in the loss/addition of unprintable characters.  Files of concern
> include shell
> +scripts and src/Configuration.  The most common problems are with
> +tab characters and CR/LF characters.  Most editors will handle the
> CR/LF problem correctly
> +but none seem to handle tab characters.  If you need to edit files
> prior to moving them to Open Edition,
> +edit them in a UNIX editor such as vi or emacs.<br>
>  <P>
> -Note that UNIX/Open Edition commands in this section are shown in
> +Note that Open Edition commands in this section are shown in
>  <TT><STRONG>bold</STRONG></TT>,
>  are case sensitive, and must be made from the "src" directory.
>  </P>
> @@ -93,15 +115,12 @@
>      of various "Rules" and an additional section at the bottom that
> determines
>      which modules to compile:
>      <BR><BR>
> -    <OL type=a>
> +    <UL>
>      <LI>Adjust the Rules and
> <TT>EXTRA_CFLAGS|LIBS|LDFLAGS|INCLUDES</TT>
>          if you feel so inclined.
>      <BR><BR>
>      <LI>Comment out (by preceding the line with a "#") lines
> corresponding
>          to those modules you DO&nbsp;NOT wish to include.
> -        At present the following modules MUST be commented out
> -        as they are not yet supported on TPF: mod_actions, mod_auth,
> -        mod_cgi, mod_env, mod_include, & mod_status.
>      <BR><BR>
>      <LI>Uncomment (by removing the initial "#", if present) lines
>          corresponding to those optional modules you wish
> @@ -109,8 +128,16 @@
>          you have written.
>          The htdocs/manual/<A HREF="readme-tpf.html">readme-tpf.html</A>
> 
>          document lists the modules that have been tested on TPF.
> -    </OL>
> -    <BR>
> +    </UL>
> +    <br>The modules placed in the Apache distribution are the ones that
> have been
> +    tested and are used regularly by various members of the Apache
> development
> +    group.  Additional modules contributed by members or third parties
> with specific
> +    needs or functions are available at
> +    <A
> +HREF="http://www.apache.org/dist/contrib/modules/">http://www.apache.org/dist/contrib/modules/</A>.
> 
> +    There are instructions on that page for linking these modules into
> the core Apache
> +    code.
> +    <BR><BR>
>  <LI>Set the TPF environment variables:
>      <TT><STRONG>.&nbsp;os/tpf/TPFExport</STRONG></TT>
>      <BR>
> @@ -127,7 +154,7 @@
>  <LI>Run the "Configure" script:
>      <TT><STRONG>Configure</STRONG></TT>
>      <BR>
> -    The output will look something like this...
> +    This generates modules.c, include/ap_config_auto.h, and necessary
> Makefiles:
>        <PRE>
>        Using config file: Configuration
>        Creating Makefile
> @@ -136,17 +163,15 @@
>         + setting C pre-processor to c89 -E
>         + checking for system header files
>         + adding selected modules
> +       + checking sizeof various data types
>        Creating Makefile in support
> -      Creating Makefile in main
> -      Creating Makefile in ap
>        Creating Makefile in regex
>        Creating Makefile in os/tpf
> +      Creating Makefile in ap
> +      Creating Makefile in main
>        Creating Makefile in modules/standard
> -      Creating Makefile in modules/example
>        $ _
>        </PRE>
> -    This generates modules.c and new versions of the Makefiles.
> -    <BR><BR>
>      If you want to maintain multiple configurations, you can
>      say, <EM>e.g.</EM>,
>      <BR>
> @@ -159,9 +184,8 @@
>         + setting C compiler to &lt;whatever&gt;
>        et cetera
>        </PRE>
> -
>      If you receive an error such as "<TT>Configure 146: FSUM7351 not
> found</TT>"
> -    the most likely explanation is that one or more of the make related
> 
> +    the most likely explanation is that one or more of the
> <tt>make</tt> related
>      files were edited on a non-UNIX platform, corrupting the
> end-of-line marks.
>      Verify that lines ending with "\" in the flagged file do&nbsp;not
> have trailing
>      spaces.  Using the vi editor and the sample error above as an
> example...
> @@ -175,19 +199,42 @@
>      distributed version of the file and make the site-specific
>      changes again using a UNIX compatible editor such as vi or emacs.
>      Then try the Configure command again.
> -    <BR><PRE>            close the file:                 <STRONG>:q
> </STRONG>(or
> +    <BR><PRE>            close the file:                 <STRONG>:q
> </STRONG>(or <STRONG>:quit!</STRONG>)</PRE>
> +
> +<LI>Edit include/ap_config.h if you would like the scoreboard kept in
> shared
> +    memory instead of file or system heap.<br>
> +    The default behavior for Apache on all platforms <i>except</i> TPF
> is to use the
> +    file system for maintaining the scoreboard (which holds current
> Apache children status).
> +    The default behavior for Apache on TPF is to use system heap.
> Available with
> +    PUT10 is the use of shared memory for the scoreboard in place of
> the file system.
> +    This reduces file activity for the parent Apache ECB and improves
> performance.
> +    To activate shared memory, uncomment or <em>add</em> the directive
> +    <tt><b>#define&nbsp;USE_SHMGET_SCOREBOARD</b></tt>
> +    and comment out or <em>remove</em> the directive <tt><b>#define
> USE_TPF_SCOREBOARD</b></tt>
> +    both of which are in the TPF section in ap_config.h.
> +    This change will only take effect after Apache is (re)compiled.
> +    <br><br>
> +    If you prefer to use the file system instead of system heap or
> shared memory, ensure that both
> +    <tt>USE_TPF_SCOREBOARD</tt> and <tt>USE_SHMGET_SCOREBOARD</tt> are
> commented out or removed.
> +    This change will only take effect after Apache is (re)compiled.
> 
> -<STRONG>:quit!</STRONG>)</PRE>
> +<A NAME="daemon"></A><br>&nbsp;<br>
> +<LI>Edit include/ap_config.h if you plan on using the ZINET DAEMON
> model instead of the NOLISTEN model.<br>
> +    The default behavior is to let Apache check the server status
> (active/inactive) with ZINET
> +    and shut itself down when appropriate.  The default behavior also
> includes checking Apache's activation number.
> +    Available with PUT11 (PJ25761) ZINET can perform these functions
> instead of Apache by using the DAEMON model.
> +    This model offers increased reliability and is preferred over the
> NOLISTEN model.
> +    If Apache goes down while running under the NOLISTEN model ZINET
> will not reactivate it nor alert the operator.
> +    To use the DAEMON model you must modify the default behavior of
> Apache by uncommenting or adding the directive
> +    <tt><b>#define&nbsp;USE_TPF_DAEMON</b></tt> within the TPF section
> in ap_config.h.
> +    This directive is also recommend when starting Apache from the
> command line (APAR PJ26515).
> +    This change will only take effect after Apache is (re)compiled.
> +    <br><br>
> +
> +
>  <LI>Now compile the programs: <TT><STRONG>make</STRONG></TT><BR>
> -    The modules placed in the Apache distribution are the ones that
> have been
> -    tested and are used regularly by various members of the Apache
> development
> -    group.  Additional modules contributed by members or third parties
> with specific
> -    needs or functions are available at
> -    <A
> -HREF="http://www.apache.org/dist/contrib/modules/">http://www.apache.org/dist/contrib/modules/</A>.
> 
> -    There are instructions on that page for linking these modules into
> the core Apache
> -    code.
> -    <BR><BR>
> +    Besides compiling, <tt>make</tt> also runs main/gen_test_char.c and
> main/gen_uri_delims.c
> +    in order to create main/test_char.h and main/uri_delims.h
> respectively<BR><BR>
>      If during compilation you get a warning about a missing 'regex.h',
> set
>      <TT>WANTHSREGEX=yes</TT> in the src/Configuration file and start
> back at the
>      <TT><STRONG>Configure</STRONG></TT> step.
> @@ -196,35 +243,48 @@
>  <A NAME="installation">&nbsp;</A>
>  <H2 align=center>Installation</H2>
>  <OL>
> -<LI>After compilation, you will have all the object files required to
> build an
> -  "httpd" loadset.  The next step is to link the object files and
> create a loadset to be
> -  stored in a PDS.  Sample JCL for linking and loadsets has been
> included in
> -  src/os/tpf/samples as "linkdll.jcl" and "loadset.jcl".  You can
> submit these jobs
> -  from CMS or directly from Open Edition if you have the proper
> authority.  After
> -  the jobs have completed, you can <TT>ZOLDR LOAD</TT> them to your TPF
> system.
> -  <BR><BR>
> -  NOTE: The <TT>mod_<EM>xxx</EM>.o</TT> files in the linkdll.jcl file
> must correspond to the
> -  <TT>mod_<EM>xxx</EM>.o</TT> lines in the src/Configuration file.
> -  <BR><BR>
> +<LI>Link the compiled object files into a DLL.
> +    Sample link JCL has been included as
> src/os/tpf/samples/linkdll.jcl.
> +    You will need to modify this JCL:
> +    <ul>
> +       <li>Change the IDs, data set names, and libraries for your
> particular site.
> +       <li>Add/remove <TT>mod_<EM>xxx</EM>.o</TT> files so they
> correspond to the
> +           <TT>mod_<EM>xxx</EM>.o</TT> lines in your src/Configuration
> file.
> +    </ul>
> +  <br><font color=red size=4>TIP: </font>
> +  Do NOT include gen_test_char.o or gen_uri_delims.o in the link JCL
> since these files are only
> +  used during the <tt>make</tt> step.
> +  <br><br>
> +<LI>Create a loadset.  Sample loadset JCL has been included as
> src/os/tpf/samples/loadset.jcl.
> +    You will need to modify this JCL for your particular site.
> +  <br><br>
> +<LI>Load (<tt>ZOLDR LOAD</tt>) and activate (<tt>ZOLDR ACT</tt>) the
> loadset on your test system.
> +  <br><br>
> +<LI>Ensure that the program name you are using for Apache has
> <tt>RESTRICT</tt> and <tt>KEY0</tt> authorization.
> +    <tt><b>zdpat <i>pppp</i>&nbsp;</b>(<b>c-c</b>)</tt> will display
> allocation information.
> +    You can use
> <tt><b>zapat&nbsp;<i>pppp</i>&nbsp;restrict&nbsp;key0&nbsp;</b>(<b>c-c</b>)</tt>
> to alter the
> +    authorization.
> +    Note that if the program name is unallocated, you must have the
> loadset for it activated or you will receive
> +    INVALID PROGRAM NAME from the <tt>zdpat/zapat</tt> entries.
> +   <br><br>
>  <LI>
>    Apache requires a configuration file to initialize itself during
> activation.
>    (Previously three configuration files were used.)
>    Copy the distribution version, /conf/httpd.conf-dist, to
> /conf/httpd.conf and then
> -  edit the /conf/httpd.conf copy with your site specific information.
> If your system is pre-PUT09 you
> -  <font color=red><STRONG>must</STRONG></FONT> change
> <TT>ServerType</TT> from <TT>standalone</TT>
> -  to <TT>inetd</TT>.
> +  edit the /conf/httpd.conf copy with your site specific information.
>    <BR><BR>
>    General documentation for Apache is located at
>    <A HREF="http://www.apache.org/docs/">http://www.apache.org/docs/</A>
> 
> -  and in the HTML pages included with this distribution under the
> +  and in the HTML pages included with the distribution (tarball) under
> the
>    /htdocs/manual directory.
>    <BR><BR>
>  <LI>On TPF activate ZCLAW and update INETD using ZINET entries, the
> common case:
>      <BR><BR>
>      <PRE>
>      ZINET ADD S-TFTP   PGM-CTFT PORT-69 PROTOCOL-UDP MODEL-NOWAIT
> -    ZINET ADD S-APACHE PGM-<EM>pppp</EM> PROTOCOL-TCP MODEL-NOWAIT
> PORT-80  (if inetd mode)
> -    ZINET ADD S-APACHE PGM-<EM>pppp</EM> PROTOCOL-TCP
> MODEL-NOLISTEN        (if standalone mode)</PRE>
> +
> +    ZINET ADD S-APACHE PGM-<EM>pppp</EM> MODEL-NOLISTEN PROTOCOL-TCP
> +    or ZINET ADD S-APACHE PGM-<EM>pppp</EM> MODEL-DAEMON USER-root <A
> HREF="#daemon">(see notes above regarding the DAEMON model)</A></PRE>
>    Please refer to <EM>IBM Transaction Processing Facility Transmission
> Control
>    Protocol/Internet Protocol Version 4 Release 1</EM> for more
> information
>    on ZCLAW, INETD, and TFTP.
> @@ -236,19 +296,23 @@
>       /usr/local/apache/logs
>       /usr/local/apache/icons
>       /usr/local/apache/htdocs</PRE>
> -    The logs directory must exist in order to avoid an
> -    <CODE>fopen</CODE> error while running Apache.  TFTP an empty file
> into
> -    the logs subdirectory to create it.  All gif, jpg, and zip files
> should be
> -    TFTP'd as binary; conf files and html pages should be TFTP'd as
> text.
> +    All gif, jpg, and zip files should be TFTP'd as binary; conf files
> and html pages should be TFTP'd as text.
> +    <br>The logs directory must exist in order to avoid an
> <CODE>fopen</CODE> error while running Apache.
> +    If you're running a PUT10 or higher version of TPF make the
> directory using the
> +    <tt><b>zfile mkdir /usr/local/apache/logs</b></tt> functional
> entry.
> +    If you're running TPF version PUT09 TFTP an empty file into the
> logs subdirectory to create it.
> +    <br><br>
> +<LI>Start the server using the <tt><b>ZINET START S-APACHE</b></tt>
> command.
>  </OL>
>  <A NAME="visualage">&nbsp;</A>
>  <H2 align=center>Compiling with VisualAge TPF</H2>
>  <P>
> -  It is not required that "make" be used to compile Apache for TPF:
> +  It is not required that <tt>make</tt> be used to compile Apache for
> TPF:
>    Individual programs may be compiled using IBM's VisualAge TPF
> product.
>    This is particularly useful when compiling selected programs for the
> Debug Tool.
>    <BR><BR>
>    The following VisualAge compile settings are required:
> +</P>
>    <UL>
>    <LI><EM>"DEFINE - Define preprocessor macro name(s)"</EM> must
> include
>       <TT><STRONG>TPF, CHARSET_EBCDIC, _POSIX_SOURCE,</STRONG></TT> and
> @@ -261,10 +325,9 @@
>    <BR><BR>
>    <LI><EM>"LONGNAME - Support long names"</EM> must be checked
>    </UL>
> -</P>
>  <HR>
>  <CENTER>[&nbsp;<A HREF="#top">top</A>
> -   &nbsp;|&nbsp;<A HREF="#setup">Setup</A>
> +   &nbsp;|&nbsp;<A HREF="#download">Download</A>
>     &nbsp;|&nbsp;<A HREF="#compilation">Compilation</A>
>     &nbsp;|&nbsp;<A HREF="#installation">Installation</A>
>     &nbsp;|&nbsp;<A HREF="#visualage">VisualAge</A>&nbsp;]
> Index: apache/htdocs/manual/readme-tpf.html
> ===================================================================
> RCS file: /apache/apache/htdocs/manual/readme-tpf.html,v
> retrieving revision 1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1 -r1.2
> --- readme-tpf.html 1999/07/21 22:01:06 1.1
> +++ readme-tpf.html 1999/07/21 22:06:21 1.2
> @@ -19,7 +19,7 @@
>     IBM's EBCDIC-based
>     <A HREF="http://www.s390.ibm.com/products/tpf/tpfhp.html">TPF</A>
>     (Transaction Processing Facility) operating system.
> -   Unless otherwise noted TPF version 4.1 PUT08 and APAR PJ25589 are
> required.
> +   Unless otherwise noted TPF version 4.1 PUT09 is required.
>     <BR><BR>
>     Refer to htdocs/manual/<A
> HREF="install-tpf.html">install-tpf.html</A>
>     for step-by-step installation instructions.
> @@ -37,14 +37,9 @@
>  <P>
>     The distributed configuration files (httpd.conf-dist and
>     mime.types, both located in the conf subdirectory)
> -   work on TPF with only a couple of operating system specific changes
> -   to httpd.conf:<BR>
> -   <UL>
> -   <LI>ServerType needs to be "inetd" on pre-PUT09 systems.
> -   <LI>Performance considerations may dictate setting KeepAlive to
> "Off"
> +   work on TPF.  Performance considerations may dictate setting
> KeepAlive to "Off"
>         (the default is "On") or lowering the Timeout value from the
> default
>         300 seconds (5 minutes) in order to reduce the number of active
> ECBs on your system.
> -   </UL>
>  </P>
> 
>  <A NAME="whats_available">&nbsp;</A>
> @@ -60,6 +55,7 @@
>     <LI>alloc.c
>     <LI>ap_cpystrn.c
>     <LI>ap_fnmatch.c
> +   <LI>ap_md5c.c
>     <LI>ap_signal.c
>     <LI>ap_slack.c
>     <LI>ap_snprintf.c
> @@ -68,18 +64,20 @@
>     <LI>ebcdic.c
>     <LI>gen_test.char.c
>     <LI>gen_uri_delims.c
> +   <LI>htpasswd.c <i><small>(requires PUT10)</small></i>
>     <LI>http_config.c
>     <LI>http_core.c
>     <LI>http_log.c
> -   <LI>http_main.c <A HREF="#note_1"> <i><small>(see note
> 1)</small></i></A>
> +   <LI>http_main.c
>     <LI>http_protocol.c
>     <LI>http_request.c
> -   <LI>http_vhost.c <i><small>(requires PUT9)</small></i>
> +   <LI>http_vhost.c
>     <LI>logresolve.c <i><small>(requires PUT10)</small></i>
> -   <LI>mod_access.c <A HREF="#note_2"> <i><small>(see note
> 2)</small></i></A>
> +   <LI>mod_access.c <A HREF="#notes"> <i><small>(see note
> 1)</small></i></A>
>     <LI>mod_actions.c
>     <LI>mod_alias.c
>     <LI>mod_asis.c
> +   <LI>mod_auth.c
>     <LI>mod_auth_anon.c
>     <LI>mod_autoindex.c
>     <LI>mod_cern_meta.c
> @@ -90,7 +88,7 @@
>     <LI>mod_expires.c
>     <LI>mod_headers.c
>     <LI>mod_imap.c
> -   <LI>mod_include.c <A HREF="#note_3"> <i><small>(see note
> 3)</small></i></A>
> +   <LI>mod_include.c <A HREF="#notes"> <i><small>(see note
> 2)</small></i></A>
>     <LI>mod_info.c
>     <LI>mod_log_agent.c
>     <LI>mod_log_config.c
> @@ -99,57 +97,56 @@
>     <LI>mod_mime_magic.c
>     <LI>mod_negotiation.c
>     <LI><A
> HREF="http://hpwww.ec-lyon.fr/~vincent/apache/mod_put.html">mod_put.c</A>
> 
> +          <i> <small>(third party module)</small></i>
>     <LI>mod_setenvif.c
>     <LI>mod_speling.c
>     <LI>mod_status.c
> +   <LI>mod_tpf_shm_static.c <i><small>(third party module, requires
> PUT10)</small></i>
>     <LI>mod_unique_id.c <i><small>(requires PUT10)</small></i>
>     <LI>mod_userdir.c
>     <LI>mod_usertrack.c
>     <LI>os.c
>     <LI>os-inline.c
>     <LI>regular expression parser
> +   <LI>regular expression test tool <i><small>(requires
> PUT10)</small></i>
> +   <LI>rfc1413.c
>     <LI>rotatelogs.c <i><small>(requires PUT10)</small></i>
>     <LI>util.c
>     <LI>util_date.c
> +   <LI>util_md5.c
>     <LI>util_script.c
>     <LI>util_uri.c
>     </UL></MULTICOL>
> -   <br><b>Notes:</b>
> -      <A NAME="note_1">&nbsp;</A>
> +   <b>Notes:</b>
> +      <A NAME="notes"></A>
>     <ol>
> -      <li>"Standalone" mode requires TPF version 4.1 PUT09
> -      <A NAME="note_2">&nbsp;</A>
>        <li>Use of mod_access directives &quot;<tt>allow from</tt>&quot;
> &amp; &quot;<tt>deny from</tt>&quot;
>            with host <i>names</i> (verses ip addresses) requires TPF
> version 4.1 PUT10
> -      <A NAME="note_3">&nbsp;</A>
>        <li>CGI execution requires TPF version 4.1 PUT10
>     </ol>
> 
>  <H3>Components/modules not yet supported on TPF:</H3>
> 
> -   <multicol COLS=3><UL>
> -   <LI>ap_md5c.c
> -   <LI>htpasswd.c
> -   <LI>mod_auth.c
> +   <UL>
> +   <LI>htdigest.c
> +   <LI>lib/expat-lite
>     <LI>mod_digest.c
> -   <LI>mod_mmap_static.c
> -   <LI>mod_proxy.c
>     <LI>mod_rewrite.c
> -   <LI>proxy_cache.c
> -   <LI>proxy_connect.c
> -   <LI>proxy_ftp.c
> -   <LI>proxy_http.c
> -   <LI>proxy_util.c
> -   <LI>rfc1413.c
> -   <LI>util_md5.c
> -   </UL></MULTICOL>
> +   <LI>mod_vhost_alias.c
> +   <LI>proxy server code
> +   </UL>
> 
>  <H3>Components/modules that don't apply or that probably won't ever be
> available on TPF:</H3>
> 
>     <multicol COLS=3><UL>
> +   <LI>ab.c
> +   <LI>ap_getpass.c
>     <LI>mod_auth_db.c
>     <LI>mod_auth_dbm.c
>     <LI>mod_auth_db.module
> +   <LI>mod_mmap_static.c
>     <LI>mod_so.c
>     <LI>suexec.c
>     </UL></MULTICOL>
> @@ -172,13 +169,13 @@
>        <LI>bypass the use of <CODE>ap_block_alarms()</CODE> &amp;
>           <CODE>ap_unblock_alarms()</CODE>
>        <LI>add <CODE>tpf_process_signals()</CODE> calls
> -      <LI>add <CODE>select()</CODE> calls in buff.c to prevent
> blocking.
> +      <LI>add <CODE>select()</CODE> calls to prevent blocking.
>        </UL>
>     <BR>
>     </UL>
> 
>     <H3>Find that function...</H3>
> -   <P>Some simple functions &amp; definitions needed to be added
> +   <P>Some simple functions &amp; definitions initially needed to be
> added
>        on TPF, such as <CODE>FD_SET()</CODE>.
>        We've put these in src/os/tpf/os.h for now.
>     </P>
> Index: apache/src/ap/ap_md5c.c
> ===================================================================
> RCS file: /apache/apache/src/ap/ap_md5c.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1.1.1 -r1.2
> --- ap_md5c.c 1999/06/29 18:13:48 1.1.1.1
> +++ ap_md5c.c 1999/06/29 19:16:02 1.2
> @@ -611,7 +611,7 @@
>   /*
>    * It's not our algorithm, so feed it to crypt() if possible.
>    */
> -#if defined(WIN32) || defined(TPF)
> +#ifdef WIN32
>   /*
>    * On Windows, the only alternative to our MD5 algorithm is plain
>    * text.
> Index: apache/src/include/ap_config.h
> ===================================================================
> RCS file: /apache/apache/src/include/ap_config.h,v
> retrieving revision 1.1.1.1
> retrieving revision 1.6
> diff -a -b -u -r1.1.1.1 -r1.6
> --- ap_config.h 1999/06/29 18:13:48 1.1.1.1
> +++ ap_config.h 1999/07/21 17:39:30 1.6
> @@ -907,12 +907,12 @@
>  #define NO_LINGCLOSE
>  #define NO_MMAP
>  #define NO_OTHER_CHILD
> +#define NO_PIPED_LOGS
>  #define NO_RELIABLE_PIPED_LOGS
>  #define NO_SETSID
>  #define NO_SLACK
>  #define NO_TIMES
>  #define NO_USE_SIGACTION
> -#define NO_WRITEV
>  #define USE_LONGJMP
>  /*#define USE_SHMGET_SCOREBOARD*/
>  #define USE_TPF_ACCEPT
> @@ -920,6 +920,7 @@
>  /*#define USE_TPF_DAEMON*/
>  #define USE_TPF_SCOREBOARD
>  #define USE_TPF_SELECT
> +#define crypt(buf,salt) ((char *)buf)
>  #undef  offsetof
>  #define offsetof(s_type,field) ((size_t)&(((s_type*)0)->field))
> 
> Index: apache/src/include/http_log.h
> ===================================================================
> RCS file: /apache/apache/src/include/http_log.h,v
> retrieving revision 1.1.1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1.1.1 -r1.2
> --- http_log.h 1999/06/29 18:13:48 1.1.1.1
> +++ http_log.h 1999/07/01 16:10:43 1.2
> @@ -136,7 +136,7 @@
> 
>  typedef struct piped_log {
>      pool *p;
> -#ifndef NO_RELIABLE_PIPED_LOGS
> +#if !defined(NO_RELIABLE_PIPED_LOGS) || defined(TPF)
>      char *program;
>      int pid;
>      int fds[2];
> @@ -147,7 +147,7 @@
> 
>  API_EXPORT(piped_log *) ap_open_piped_log (pool *p, const char
> *program);
>  API_EXPORT(void) ap_close_piped_log (piped_log *);
> -#ifndef NO_RELIABLE_PIPED_LOGS
> +#if !defined(NO_RELIABLE_PIPED_LOGS) || defined(TPF)
>  #define ap_piped_log_read_fd(pl) ((pl)->fds[0])
>  #define ap_piped_log_write_fd(pl) ((pl)->fds[1])
>  #else
> Index: apache/src/main/http_log.c
> ===================================================================
> RCS file: /apache/apache/src/main/http_log.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.3
> diff -a -b -u -r1.1.1.1 -r1.3
> --- http_log.c 1999/06/29 18:13:48 1.1.1.1
> +++ http_log.c 1999/07/21 17:44:21 1.3
> @@ -569,7 +569,7 @@
>  }
> 
>  /* piped log support */
> -
> +#ifndef NO_PIPED_LOGS
>  #ifndef NO_RELIABLE_PIPED_LOGS
>  /* forward declaration */
>  static void piped_log_maintenance(int reason, void *data, ap_wait_t
> status);
> @@ -746,18 +746,9 @@
>  {
>      piped_log *pl;
>      FILE *dummy;
> -#ifdef TPF
> -    TPF_FORK_CHILD cld;
> -    cld.filename = (char *)program;
> -    cld.subprocess_env = NULL;
> -    cld.prog_type = FORK_NAME;
> 
> -    if (!ap_spawn_child (p, NULL, &cld,
> -      kill_after_timeout, &dummy, NULL, NULL)){
> -#else
>      if (!ap_spawn_child(p, piped_log_child, (void *)program,
>     kill_after_timeout, &dummy, NULL, NULL)) {
> -#endif /* TPF */
>   perror("ap_spawn_child");
>   fprintf(stderr, "Couldn't fork child for piped log process\n");
>   exit (1);
> @@ -774,4 +765,5 @@
>  {
>      ap_pfclose(pl->p, pl->write_f);
>  }
> +#endif
>  #endif
> Index: apache/src/main/rfc1413.c
> ===================================================================
> RCS file: /apache/apache/src/main/rfc1413.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.4
> diff -a -b -u -r1.1.1.1 -r1.4
> --- rfc1413.c 1999/06/29 18:13:48 1.1.1.1
> +++ rfc1413.c 1999/07/16 20:52:35 1.4
> @@ -100,6 +100,12 @@
> 
>  static JMP_BUF timebuf;
> 
> +/* ident_timeout - handle timeouts */
> +static void ident_timeout(int sig)
> +{
> +    ap_longjmp(timebuf, sig);
> +}
> +
>  /* bind_connect - bind both ends of a socket */
>  /* Ambarish fix this. Very broken */
>  static int get_rfc1413(int sock, const struct sockaddr_in *our_sin,
> @@ -147,6 +153,9 @@
>    ntohs(our_sin->sin_port));
> 
>      /* send query to server. Handle short write. */
> +#ifdef CHARSET_EBCDIC
> +    ebcdic2ascii(&buffer, &buffer, buflen);
> +#endif
>      i = 0;
>      while(i < strlen(buffer)) {
>          int j;
> @@ -169,8 +178,27 @@
> 
>      i = 0;
>      memset(buffer, 0, sizeof(buffer));
> -    while((cp = strchr(buffer, '\n')) == NULL && i < sizeof(buffer) -
> 1) {
> +    /*
> +     * Note that the strchr function below checks for 10 instead of
> '\n'
> +     * this allows it to work on both ASCII and EBCDIC machines.
> +     */
> +    while((cp = strchr(buffer, 10)) == NULL && i < sizeof(buffer) - 1)
> {
>          int j;
> +
> +#ifdef TPF
> +        /*
> +         * socket read on TPF doesn't get interrupted by
> +         * signals so additional processing is needed
> +         */
> +        j = ap_set_callback_and_alarm(NULL, 0);
> +        ap_set_callback_and_alarm(ident_timeout, j);
> +        j = select(&sock, 1, 0, 0, j * 1000);
> +        if (j < 1) {
> +            ap_set_callback_and_alarm(NULL, 0);
> +            ap_check_signals();
> +            return -1;
> +        }
> +#endif /* TPF */
>   j = read(sock, buffer+i, (sizeof(buffer) - 1) - i);
>   if (j < 0 && errno != EINTR) {
>      ap_log_error(APLOG_MARK, APLOG_CRIT, srv,
> @@ -183,6 +211,9 @@
>      }
> 
>  /* RFC1413_USERLEN = 512 */
> +#ifdef CHARSET_EBCDIC
> +    ascii2ebcdic(&buffer, &buffer, (size_t)i);
> +#endif
>      if (sscanf(buffer, "%u , %u : USERID :%*[^:]:%512s", &rmt_port,
> &our_port,
>          user) != 3 || ntohs(rmt_sin->sin_port) != rmt_port
>   || ntohs(our_sin->sin_port) != our_port)
> @@ -197,12 +228,6 @@
>   *cp = '\0';
> 
>      return 0;
> -}
> -
> -/* ident_timeout - handle timeouts */
> -static void ident_timeout(int sig)
> -{
> -    ap_longjmp(timebuf, sig);
>  }
> 
>  /* rfc1413 - return remote user name, given socket structures */
> Index: apache/src/os/tpf/os.c
> ===================================================================
> RCS file: /apache/apache/src/os/tpf/os.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.8
> diff -a -b -u -r1.1.1.1 -r1.8
> --- os.c 1999/06/29 18:13:48 1.1.1.1
> +++ os.c 1999/07/14 15:58:27 1.8
> @@ -66,7 +66,13 @@
>  #include "scoreboard.h"
>  #include "http_log.h"
>  #include "http_conf_globals.h"
> +#ifdef __PIPE_
> +#include "ipc.h"
> +#include "shm.h"
> +static TPF_FD_LIST *tpf_fds = NULL;
> +#endif
> 
> +void *tpf_shm_static_ptr = NULL;
>  static FILE *sock_fp;
> 
>  /* Check the Content-Type to decide if conversion is needed */
> @@ -161,13 +167,12 @@
>      return rv;
>  }
> 
> -#ifndef __PIPE_
> -int pipe(int fildes[2])
> +/* the getpass function is not usable on TPF */
> +char *getpass(const char* prompt)
>  {
> -    errno = ENOSYS;
> -    return(-1);
> +    errno = EIO;
> +    return((char *)NULL);
>  }
> -#endif
> 
>  /* fork and exec functions are not defined on
>     TPF due to the implementation of tpf_fork() */
> @@ -218,8 +223,6 @@
>     array_header             *env_arr = ap_table_elts ((array_header *)
> cld->subprocess_env);
>     table_entry              *elts = (table_entry *) env_arr->elts;
> 
> -
> -
>     if (func) {
>        if (result=func(data, NULL)) {
>            return 0;                    /* error from child function */
> @@ -304,7 +307,6 @@
>         fcntl(in_fds[1], F_SETFD, fd_flags_in);
>     }
> 
> -
>     if (pipe_err) {
>         close(err_fds[1]);
>         dup2(temp_err, STDERR_FILENO);
> @@ -312,7 +314,6 @@
>         fcntl(err_fds[0], F_SETFD, fd_flags_err);
>     }
> 
> -
>     if (pid) {
> 
>         ap_note_subprocess(p, pid, kill_how);
> @@ -364,6 +365,8 @@
> 
>      input_parms.slot = slot;
>      input_parms.restart_time = ap_restart_time;
> +    input_parms.shm_static_ptr = tpf_shm_static_ptr;
> +    input_parms.tpf_fds = tpf_fds;
>      fork_input.ebw_data = &input_parms;
>      fork_input.program = ap_server_argv0;
>      fork_input.prog_type = TPF_FORK_NAME;
> @@ -390,11 +393,12 @@
> 
>  void os_note_additional_cleanups(pool *p, int sd) {
>      char sockfilename[50];
> -    /* write the socket to file so that TPF socket device driver will
> close socket in case
> -       we happen to abend. */
> +    /* write the socket to file so that TPF socket device driver
> +       will close socket in case we happen to abend. */
>      sprintf(sockfilename, "/dev/tpf.socket.file/%.8X", sd);
>      sock_fp = fopen(sockfilename, "r+");
> -    ap_note_cleanups_for_file(p, sock_fp);  /* arrange to close on exec
> or restart */
> +    /* arrange to close on exec or restart */
> +    ap_note_cleanups_for_file(p, sock_fp);
>      fcntl(sd,F_SETFD,FD_CLOEXEC);
>  }
> 
> @@ -402,6 +406,305 @@
>      tpf_child = 1;
>      ap_my_generation = input_parms->generation;
>      ap_restart_time = input_parms->restart_time;
> +    tpf_fds = input_parms->tpf_fds;
> +    tpf_shm_static_ptr = input_parms->shm_static_ptr;
> +}
> +
> +
> +#ifndef __PIPE_
> +
> +int pipe(int fildes[2])
> +{
> +    errno = ENOSYS;
> +    return(-1);
> +}
> +
> +API_EXPORT(piped_log *) ap_open_piped_log(pool *p, const char *program)
> 
> +{
> +    fprintf(stderr, "Pipes not supported on this TPF system\n");
> +    exit (1);
>  }
> 
> +#else
> 
> +void ap_tpf_detach_shared_mem(void *address)
> +{
> +    if (*((void **)address)) {
> +        shmdt(*((void **)address));
> +        *((void **)address) = NULL;
> +    }
> +}
> +
> +static void *ap_tpf_get_shared_mem(size_t size)
> +{
> +    key_t shmkey = IPC_PRIVATE;
> +    int shmid = -1;
> +    void *result;
> +
> +    if ((shmid = shmget(shmkey, size, IPC_CREAT | SHM_R | SHM_W)) ==
> -1) {
> +        perror("shmget failed in ap_tpf_get_shared_mem funciton");
> +        exit(1);
> +    }
> +#define BADSHMAT ((void *)(-1))
> +    if ((result = shmat(shmid, 0, 0)) == BADSHMAT) {
> +        perror("shmat failed in ap_tpf_get_shared_mem");
> +    }
> +    if (shmctl(shmid, IPC_RMID, NULL) != 0) {
> +        perror("shmctl(IPC_RMID) failed in ap_tpf_get_shared_mem");
> +    }
> +    if (result == BADSHMAT) {   /* now bailout */
> +        exit(1);
> +    }
> +
> +    return result;
> +}
> +
> +int ap_tpf_fd_lookup(enum FILE_TYPE file_type, const char *fname)
> +/* lookup a fd in the fd inheritance table */
> +{
> +    if (tpf_fds) {
> +        int i;
> +        TPF_FD_ITEM *fd_item = &tpf_fds->first_item;
> +
> +        for (i = 1; i <= tpf_fds->nbr_of_items; i++, fd_item++) {
> +            /* check for an fd with the same type and name */
> +            if ((file_type == fd_item->file_type) &&
> +                (strcmp(fname, fd_item->fname) == 0) ) {
> +                /* we've got a match, check that fd is still open */
> +                struct stat stbuf;
> +
> +                if (fstat(fd_item->fd, &stbuf) == 0) {
> +                    return(fd_item->fd);
> +                }
> +                else {
> +                    /* fd is not open - the entire fd table is suspect
> */
> +                    fprintf(stderr, "fstat failed in ap_tpf_fd_lookup "
> 
> +                                    "for fd %i (filename/pipe to %s):
> %s\n",
> +                            fd_item->fd, fname, strerror(errno));
> +                    ap_tpf_detach_shared_mem(&tpf_fds);
> +                    return(-1);
> +                }
> +            }
> +        }
> +    }
> +    return(-1);
> +}
> +
> +void ap_tpf_add_fd(pool *p, int fd, enum FILE_TYPE file_type,
> +                   const char *fname)
> +/* add a newly opened fd to the fd inheritance table */
> +{
> +    int fname_size;
> +
> +    if (tpf_child) {
> +        return; /* no kids allowed */
> +    }
> +    if (tpf_fds == NULL) {
> +        /* get shared memory if necssary */
> +        tpf_fds = ap_tpf_get_shared_mem((size_t)TPF_FD_LIST_SIZE);
> +        if (tpf_fds) {
> +            ap_register_cleanup(p, (void *)&tpf_fds,
> +                                ap_tpf_detach_shared_mem,
> ap_null_cleanup);
> +            tpf_fds->nbr_of_items = 0;
> +            tpf_fds->next_avail_byte = &tpf_fds->first_item;
> +            tpf_fds->last_avail_byte = (char *)tpf_fds +
> TPF_FD_LIST_SIZE;
> +        }
> +    }
> +    /* add fd */
> +    if (tpf_fds) {
> +        TPF_FD_ITEM *fd_item;
> +
> +        /* make sure there's room */
> +        fname_size = strlen(fname) + 1;
> +        if (sizeof(TPF_FD_ITEM) + fname_size >
> +            (char *)tpf_fds->last_avail_byte - (char
> *)tpf_fds->next_avail_byte)
> + {
> +            fprintf(stderr, "fd inheritance table out of room, increase
> "
> +                    "TPF_FD_LIST_SIZE in os.h and recompile Apache\n");
> 
> +            exit(1);
> +        }
> +        /* add the new item */
> +        fd_item = tpf_fds->next_avail_byte;
> +        tpf_fds->next_avail_byte = fd_item + 1;
> +        tpf_fds->last_avail_byte
> +            = (char *)tpf_fds->last_avail_byte - fname_size;
> +        fd_item->fname = tpf_fds->last_avail_byte;
> +        strcpy(fd_item->fname, fname);
> +        fd_item->fd = fd;
> +        fd_item->file_type = file_type;
> +        tpf_fds->nbr_of_items++;
> +    }
> +}
> +
> +API_EXPORT(piped_log *) ap_open_piped_log(pool *p, const char *program)
> 
> +{
> +    int log_fd;
> +    piped_log *pl;
> +
> +    /* check fd inheritance table to see if this log is already open */
> 
> +    log_fd = ap_tpf_fd_lookup(PIPE_OUT, program);
> +    if (log_fd < 0) {
> +        /* this is a new log - open it */
> +        FILE *dummy;
> +        TPF_FORK_CHILD cld;
> +        cld.filename = (char *)program;
> +        cld.subprocess_env = NULL;
> +        cld.prog_type = FORK_NAME;
> +
> +        if (ap_spawn_child(p, NULL, &cld, kill_after_timeout,
> +            &dummy, NULL, NULL)) {
> +            log_fd = fileno(dummy);
> +            /* add this log to the fd inheritance table */
> +            ap_tpf_add_fd(p, log_fd, PIPE_OUT, program);
> +        }
> +        else {
> +            perror("ap_spawn_child");
> +            fprintf(stderr, "Couldn't fork child for piped log
> process\n");
> +            exit (1);
> +        }
> +    }
> +
> +    pl = ap_palloc(p, sizeof (*pl));
> +    pl->p = p;
> +    pl->fds[1] = log_fd;
> +
> +    return pl;
> +}
> +
> +#endif /* __PIPE_ */
> +
> +
> +/*   The following functions are used for the tpf specific module
> called
> +     mod_tpf_shm_static.  This module is a clone of Apache's
> mod_mmap_static.
> +     Because TPF doesn't support the system call mmap(), it is replaced
> by
> +     shared memory, but uses the mmap directives, etc.   */
> +
> +union align{
> +
> +   /* Types which are likely to have the longest RELEVANT alignment
> +    * restrictions...     */
> +
> +   char *cp;
> +   void (*f) (void);
> +   long l;
> +   FILE *fp;
> +   double d;
> +};
> +
> +#define CLICK_SZ (sizeof(union align))
> +union block_hdr {
> +    union align a;
> +
> +    /* Actual header... */
> +
> +    struct {
> +        char *endp;
> +        union block_hdr *next;
> +        char *first_avail;
> + #ifdef POOL_DEBUG
> +        union block_hdr *global_next;
> +        struct pool *owning_pool;
> + #endif
> +     } h;
> +};
> +
> +struct pool {
> +    union block_hdr *first;
> +    union block_hdr *last;
> +    struct cleanup *cleanups;
> +    struct process_chain *subprocesses;
> +    struct pool *sub_pools;
> +    struct pool *sub_next;
> +    struct pool *sub_prev;
> +    struct pool *parent;
> +    char *free_first_avail;
> +#ifdef ALLOC_USE_MALLOC
> +    void *allocation_list;
> +#endif
> +#ifdef POOL_DEBUG
> +    struct pool *joined;
> +#endif
> +};
> +
> +#include "alloc.h"
> +#define POOL_HDR_CLICKS (1 + ((sizeof(struct pool) - 1) / CLICK_SZ))
> +#define POOL_HDR_BYTES (POOL_HDR_CLICKS * CLICK_SZ)
> +
> +pool * ap_get_shared_mem_pool(size_t size)
> +{
> +
> +    pool *new_pool;
> +    union block_hdr *blok;
> +
> +    blok = (union block_hdr *) ap_tpf_get_shared_mem(size);
> +    /* if shm fails, it will exit  blok will be valid here */
> +    memset((char *) blok, '\0', size);
> +    blok->h.next = NULL;
> +    blok->h.first_avail = (char *) (blok + 1);
> +    blok->h.endp = size + blok->h.first_avail;
> +    new_pool = (pool *) blok->h.first_avail;
> +    blok->h.first_avail += POOL_HDR_BYTES;
> +    new_pool->free_first_avail = blok->h.first_avail;
> +    new_pool->first = new_pool->last = blok;
> +
> +    return new_pool;
> +}
> +
> +
> +int ap_check_shm_space(struct pool *a, int size)
> +{
> +
> +    union block_hdr *blok = a->last;
> +    char *first_avail = blok->h.first_avail;
> +    char *new_first_avail;
> +
> +    new_first_avail = first_avail + size;
> +    if (new_first_avail <= blok->h.endp) {
> +         return (1);
> +    }
> +    else
> +         return (0);
> +}
> Index: apache/src/os/tpf/os.h
> ===================================================================
> RCS file: /apache/apache/src/os/tpf/os.h,v
> retrieving revision 1.1.1.1
> retrieving revision 1.5
> diff -a -b -u -r1.1.1.1 -r1.5
> --- os.h 1999/06/29 18:13:48 1.1.1.1
> +++ os.h 1999/07/16 17:13:05 1.5
> @@ -70,6 +70,24 @@
>  /* TPF doesn't have, or need, tzset (it is used in mod_expires.c) */
>  #define tzset()
> 
> +/* definitions for the file descriptor inheritance table */
> +#define TPF_FD_LIST_SIZE 4000
> +
> +enum FILE_TYPE { PIPE_OUT = 1, PIPE_IN, PIPE_ERR };
> +
> +typedef struct tpf_fd_item {
> +    int            fd;
> +    enum FILE_TYPE file_type;
> +    char           *fname;
> +}TPF_FD_ITEM;
> +
> +typedef struct tpf_fd_list {
> +    void           *next_avail_byte;
> +    void           *last_avail_byte;
> +    unsigned int   nbr_of_items;
> +    TPF_FD_ITEM    first_item;
> +}TPF_FD_LIST;
> +
>  #include <i$netd.h>
>  struct apache_input {
>      INETD_SERVER_INPUT  inetd_server;
> @@ -79,9 +97,16 @@
>      int                 generation;         /* server generation number
> */
>      int                 listeners[10];
>      time_t              restart_time;
> +    TPF_FD_LIST         *tpf_fds;           /* fd inheritance table ptr
> */
> +    void                *shm_static_ptr;    /* shm ptr for static pages
> */
>  };
> 
> +
>  typedef struct apache_input APACHE_TPF_INPUT;
> +extern void *tpf_shm_static_ptr;            /* mod_tpf_shm_static */
> +#define TPF_SHM_STATIC_SIZE 200000
> +#define MMAP_SEGMENT_SIZE 32767             /* writev can handle 32767
> */
> +#define _SYS_UIO_H_                         /* writev */
> 
>  typedef struct tpf_fork_child {
>       char  *filename;
> @@ -95,6 +120,7 @@
>  struct server_rec;
>  pid_t os_fork(struct server_rec *s, int slot);
>  int os_check_server(char *server);
> +char *getpass(const char *prompt);
>  extern char *ap_server_argv0;
>  extern int scoreboard_fd;
>  #include <signal.h>
> Index: apache/src/os/tpf/samples/linkdll.jcl
> ===================================================================
> RCS file: /apache/apache/src/os/tpf/samples/linkdll.jcl,v
> retrieving revision 1.1.1.1
> retrieving revision 1.3
> diff -a -b -u -r1.1.1.1 -r1.3
> --- linkdll.jcl 1999/06/29 18:13:48 1.1.1.1
> +++ linkdll.jcl 1999/07/16 17:11:13 1.3
> @@ -1,88 +1,96 @@
> -//APACH JOB MSGLEVEL=(1,1),CLASS=A,MSGCLASS=A
> 
> -/*ROUTE PRINT XXXXXX.XXXXXX
> 
> -/*ROUTE PUNCH XXXXXX.XXXXXX
> 
> -/*NOTIFY XXXXXX.XXXXXX
> 
> +//LINKDLL  JOB MSGLEVEL=(1,1),CLASS=G,MSGCLASS=S
> +/*ROUTE PRINT <your-id-here>
> +/*ROUTE PUNCH <your-id-here>
> +/*NOTIFY <your-id-here>
>  //CCLE JCLLIB ORDER=(SYS1.CBC.SCBCPRC,SYS1.CEE.SCEEPROC)
> 
>  //PRELINK EXEC EDCPL,COND.LKED=(0,NE),
> 
> -// PPARM='OMVS,DLLNAME(pppp)',
> 
> +// PPARM='OMVS,DLLNAME(CHTA)',
>  // 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
> 
> +//PLKED.SYSLIB DD DISP=SHR,DSN=ACP.STUB.RLSE40
>  //             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
> 
> +//PLKED.OBJLIB 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\
> 
> +//PLKED.OBJ01  DD PATH='/<your-path-here>/src/ap/ap_cpystrn.o'
> +//PLKED.OBJ02  DD PATH='/<your-path-here>/src/ap/ap_execve.o'
> +//PLKED.OBJ03  DD PATH='/<your-path-here>/src/ap/ap_fnmatch.o'
> +//PLKED.OBJ04  DD PATH='/<your-path-here>/src/ap/ap_getpass.o'
> +//PLKED.OBJ05  DD PATH='/<your-path-here>/src/ap/ap_md5c.o'
> +//PLKED.OBJ06  DD PATH='/<your-path-here>/src/ap/ap_signal.o'
> +//PLKED.OBJ07  DD PATH='/<your-path-here>/src/ap/ap_slack.o'
> +//PLKED.OBJ08  DD PATH='/<your-path-here>/src/ap/ap_snprintf.o'
> +//PLKED.OBJ09  DD PATH='/<your-path-here>/src/buildmark.o'
> +//PLKED.OBJ10  DD PATH='/<your-path-here>/src/main/alloc.o'
> +//PLKED.OBJ11  DD PATH='/<your-path-here>/src/main/buff.o'
> +//PLKED.OBJ12  DD PATH='/<your-path-here>/src/main/http_config.o'
> +//PLKED.OBJ13  DD PATH='/<your-path-here>/src/main/http_core.o'
> +//PLKED.OBJ14  DD PATH='/<your-path-here>/src/main/http_log.o'
> +//PLKED.OBJ15  DD PATH='/<your-path-here>/src/main/http_main.o'
> +//PLKED.OBJ16  DD PATH='/<your-path-here>/src/main/http_protocol.o'
> +//PLKED.OBJ17  DD PATH='/<your-path-here>/src/main/http_request.o'
> +//PLKED.OBJ18  DD PATH='/<your-path-here>/src/main/http_vhost.o'
> +//PLKED.OBJ19  DD PATH='/<your-path-here>/src/main/rfc1413.o'
> +//PLKED.OBJ20  DD PATH='/<your-path-here>/src/main/util.o'
> +//PLKED.OBJ21  DD PATH='/<your-path-here>/src/main/util_date.o'
> +//PLKED.OBJ22  DD PATH='/<your-path-here>/src/main/util_md5.o'
> +//PLKED.OBJ23  DD PATH='/<your-path-here>/src/main/util_script.o'
> +//PLKED.OBJ24  DD PATH='/<your-path-here>/src/main/util_uri.o'
> +//PLKED.OBJ25  DD PATH='/<your-path-here>/src/modules.o'
> +//PLKED.OBJ26  DD
> PATH='/<your-path-here>/src/modules/standard/mod_acce\
> +//             ss.o'
> +//PLKED.OBJ27  DD
> PATH='/<your-path-here>/src/modules/standard/mod_acti\
> +//             ons.o'
> +//PLKED.OBJ28  DD
> PATH='/<your-path-here>/src/modules/standard/mod_alia\
> +//             s.o'
> +//PLKED.OBJ29  DD
> PATH='/<your-path-here>/src/modules/standard/mod_asis\
> +//             .o'
> +//PLKED.OBJ30  DD
> PATH='/<your-path-here>/src/modules/standard/mod_auth\
> +//             .o'
> +//PLKED.OBJ31  DD
> PATH='/<your-path-here>/src/modules/standard/mod_auto\
>  //             index.o'
> 
> -//PLKED.OBJ34  DD
> PATH='/usr/local/apache/src/modules/standard/mod_dir.\
> 
> +//PLKED.OBJ32  DD
> PATH='/<your-path-here>/src/modules/standard/mod_cgi.\
> +//             o'
> +//PLKED.OBJ33  DD
> PATH='/<your-path-here>/src/modules/standard/mod_dir.\
> +//             o'
> +//PLKED.OBJ34  DD
> PATH='/<your-path-here>/src/modules/standard/mod_env.\
>  //             o'
> 
> -//PLKED.OBJ35  DD
> PATH='/usr/local/apache/src/modules/standard/mod_mime\
> 
> +//PLKED.OBJ35  DD
> PATH='/<your-path-here>/src/modules/standard/mod_imap\
>  //             .o'
> 
> -//PLKED.OBJ36  DD
> PATH='/usr/local/apache/src/modules/standard/mod_sete\
> 
> +//PLKED.OBJ36  DD
> PATH='/<your-path-here>/src/modules/standard/mod_incl\
> +//             ude.o'
> +//PLKED.OBJ37  DD
> PATH='/<your-path-here>/src/modules/standard/mod_log_\
> +//             config.o'
> +//PLKED.OBJ38  DD
> PATH='/<your-path-here>/src/modules/standard/mod_mime\
> +//             .o'
> +//PLKED.OBJ39  DD
> PATH='/<your-path-here>/src/modules/standard/mod_nego\
> +//             tiation.o'
> +//PLKED.OBJ40  DD
> PATH='/<your-path-here>/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\
> 
> +//PLKED.OBJ41  DD
> PATH='/<your-path-here>/src/modules/standard/mod_stat\
> +//             us.o'
> +//PLKED.OBJ42  DD
> PATH='/<your-path-here>/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.OBJ43  DD PATH='/<your-path-here>/src/os/tpf/cgetop.o'
> +//PLKED.OBJ44  DD PATH='/<your-path-here>/src/os/tpf/ebcdic.o'
> +//PLKED.OBJ45  DD PATH='/<your-path-here>/src/os/tpf/os.o'
> +//PLKED.OBJ46  DD PATH='/<your-path-here>/src/os/tpf/os-inline.o'
> +//PLKED.OBJ47  DD PATH='/<your-path-here>/src/regex/regcomp.o'
> +//PLKED.OBJ48  DD PATH='/<your-path-here>/src/regex/regerror.o'
> +//PLKED.OBJ49  DD PATH='/<your-path-here>/src/regex/regexec.o'
> +//PLKED.OBJ50  DD PATH='/<your-path-here>/src/regex/regfree.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 OBJ01
> + INCLUDE OBJ02
> + INCLUDE OBJ03
> + INCLUDE OBJ04
> + INCLUDE OBJ05
> + INCLUDE OBJ06
> + INCLUDE OBJ07
> + INCLUDE OBJ08
> + INCLUDE OBJ09
>   INCLUDE OBJ10
> 
>   INCLUDE OBJ11
> 
>   INCLUDE OBJ12
> 
> @@ -115,7 +123,17 @@
>   INCLUDE OBJ39
> 
>   INCLUDE OBJ40
> 
>   INCLUDE OBJ41
> 
> + INCLUDE OBJ42
> + INCLUDE OBJ43
> + INCLUDE OBJ44
> + INCLUDE OBJ45
> + INCLUDE OBJ46
> + INCLUDE OBJ47
> + INCLUDE OBJ48
> + INCLUDE OBJ49
> + INCLUDE OBJ50
> + INCLUDE OBJLIB(CINET640)
>  /*
> 
>  //*** WARNING *** NEVER change .LK to .OB in SYSLMOD!!!
> 
> -//LKED.SYSLMOD DD DISP=OLD,DSN=xxxxxx.xxxx(ppppvv)
> 
> +//LKED.SYSLMOD DD DISP=OLD,DSN=<your-dsn-here>(CHTA<vv>)
>  //
> 
> Index: apache/src/os/tpf/samples/loadset.jcl
> ===================================================================
> RCS file: /apache/apache/src/os/tpf/samples/loadset.jcl,v
> retrieving revision 1.1.1.1
> retrieving revision 1.3
> diff -a -b -u -r1.1.1.1 -r1.3
> --- loadset.jcl 1999/06/29 18:13:48 1.1.1.1
> +++ loadset.jcl 1999/07/16 17:11:03 1.3
> @@ -1,31 +1,14 @@
> -//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,
> 
> +//LOADSET  JOB MSGLEVEL=1,CLASS=G,MSGCLASS=S
> +/*ROUTE PRINT <your-id-here>
> +/*ROUTE PUNCH <your-id-here>
> +//TLDR   EXEC  PGM=TPFLDR40,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
> 
> +//STEPLIB  DD  DSN=ACP.LINK.RLSE40.BSS,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
> 
> +//SALTB    DD  DSN=ACP.SALTBL.RLSE40.BSS,DISP=SHR
> +//OBJLIB   DD  DSN=ACP.OBJ.RLSE40.BSS,DISP=SHR
> +//LOADMOD  DD  DSN=<your-dsn-here>,DISP=SHR
> +//         DD  DSN=ACP.LINK.RLSE40.BSS,DISP=SHR
>  //LOADSUM  DD  DSN=&&LOADSUM,DISP=(NEW,PASS),UNIT=SYSDA,
> 
>  //             LRECL=133,SPACE=(TRK,(10,10)),RECFM=FBA
> 
>  //CPRTEMP  DD  UNIT=SYSDA,
> 
> @@ -48,11 +31,11 @@
>  SYSID=BSS
> 
>  PATVERS=NONE
> 
>  SALVERS=40
> 
> -LOADER   LOADSET  lllllll
> 
> -LOADER   CALL  PROG ppppvv
> 
> +LOADER   LOADSET  HTTPD<vv>
> +LOADER   CALL  PROG CHTA<vv>
>  /*
> 
>  //TRANSMIT EXEC PGM=IKJEFT01,
> 
> -//  PARM='TRANSMIT xxxxxx.xxxxxx DDNAME(SYSTSIN) NOLOG NONOTIFY SEQ'
> 
> +//  PARM='TRANSMIT <your-id-here> DDNAME(SYSTSIN) NOLOG NONOTIFY SEQ'
>  //SYSTSIN  DD  UNIT=SYSDA,
> 
>  //             DSN=&&VRDROUT,DISP=(OLD,DELETE)
> 
>  //SYSTSPRT DD  DUMMY
> 
> Index: apache/src/regex/Makefile.tmpl
> ===================================================================
> RCS file: /apache/apache/src/regex/Makefile.tmpl,v
> retrieving revision 1.1.1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1.1.1 -r1.2
> --- Makefile.tmpl 1999/06/29 18:13:49 1.1.1.1
> +++ Makefile.tmpl 1999/06/29 18:19:01 1.2
> @@ -67,6 +67,10 @@
>  debug.o: debug.ih
>  main.o: main.ih
> 
> +# tester - just compile... do not link
> +re-nolink: $(OBJS)
> + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -c
> +
>  # tester
>  re: $(OBJS)
>   $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(LIBS) -o $@
> Index: apache/src/regex/debug.c
> ===================================================================
> RCS file: /apache/apache/src/regex/debug.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1.1.1 -r1.2
> --- debug.c 1999/06/29 18:13:49 1.1.1.1
> +++ debug.c 1999/06/29 19:06:05 1.2
> @@ -1,6 +1,7 @@
>  #include <stdio.h>
>  #include <string.h>
>  #include <ctype.h>
> +#include <ap_ctype.h>
>  #include <limits.h>
>  #include <stdlib.h>
>  #include <sys/types.h>
> Index: apache/src/regex/main.c
> ===================================================================
> RCS file: /apache/apache/src/regex/main.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.2
> diff -a -b -u -r1.1.1.1 -r1.2
> --- main.c 1999/06/29 18:13:49 1.1.1.1
> +++ main.c 1999/06/29 19:06:30 1.2
> @@ -3,6 +3,9 @@
>  #include <sys/types.h>
>  #include <assert.h>
>  #include <stdlib.h>
> +#ifdef TPF
> +#include <sysapi.h> /* for tmslc() */
> +#endif /* TPF */
> 
>  #include "hsregex.h"
>  #include "main.ih"
> @@ -139,6 +142,9 @@
>   char *bpname = "REG_BADPAT";
>   regex_t re;
> 
> +#ifdef TPF
> +        tmslc(TMSLC_ENABLE, "IBMHIPRI"); /* extend our process' life */
> 
> +#endif /* TPF */
>   while (fgets(inbuf, sizeof(inbuf), in) != NULL) {
>    line++;
>    if (inbuf[0] == '#' || inbuf[0] == '\n')
> Index: apache/src/support/htpasswd.c
> ===================================================================
> RCS file: /apache/apache/src/support/htpasswd.c,v
> retrieving revision 1.1.1.1
> retrieving revision 1.3
> diff -a -b -u -r1.1.1.1 -r1.3
> --- htpasswd.c 1999/06/29 18:13:49 1.1.1.1
> +++ htpasswd.c 1999/07/14 15:44:43 1.3
> @@ -180,6 +180,10 @@
>   pw = passwd;
>      }
>      else {
> +#ifdef TPF
> +        fprintf(stderr, "Invalid entry. The -b option is required on
> TPF.\n");
> +        return usage();
> +#else
>   if (ap_getpass("New password: ", pwin, sizeof(pwin)) != 0) {
>       ap_snprintf(record, (rlen - 1), "password too long (>%d)",
>     sizeof(pwin) - 1);
> @@ -191,6 +195,7 @@
>       return ERR_PWMISMATCH;
>   }
>   pw = pwin;
> +#endif /* TPF */
>      }
>      (void) srand((int) time((time_t *) NULL));
>      to64(&salt[0], rand(), 8);
> @@ -230,6 +235,9 @@
>      fprintf(stderr, " -b  Use the password from the command line rather
> ");
>      fprintf(stderr, "than prompting for it.\n");
>      fprintf(stderr, "On Windows systems the -m flag is used by
> default.\n");
> +#ifdef TPF
> +    fprintf(stderr, "On TPF the -m flag is used by default.\n");
> +#endif /* TPF */
>      return ERR_SYNTAX;
>  }
> 
> @@ -403,6 +411,11 @@
>      if (alg == ALG_CRYPT) {
>   alg = ALG_APMD5;
>   fprintf(stderr, "Automatically using MD5 format on Windows.\n");
> +    }
> +#elif defined(TPF)
> +    if (alg == ALG_CRYPT) {
> +        alg = ALG_APMD5;
> +        fprintf(stderr, "Automatically using MD5 format.\n");
>      }
>  #endif
> 
> 


Mime
View raw message