coar        97/06/24 11:39:41

  Modified:    htdocs/manual  custom-error.html new_features_1_2.html
                        process-model.html  suexec.html virtual-host.html
               htdocs/manual/misc  fin_wait_2.html index.html nopgp.html
                        perf.html vif-info.html
               htdocs/manual/mod  mod_auth_anon.html mod_include.html
                        mod_proxy.html  mod_rewrite.html mod_status.html
  Log:
        Removal of the Evil TAB Characters.
  
  Revision  Changes    Path
  1.9       +2 -2      apache/htdocs/manual/custom-error.html
  
  Index: custom-error.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/custom-error.html,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -C3 -r1.8 -r1.9
  *** custom-error.html 1997/06/04 11:07:47     1.8
  --- custom-error.html 1997/06/24 18:39:30     1.9
  ***************
  *** 29,37 ****
          response, then this response can be replaced with either some
          friendlier text or by a redirection to another URL (local or
          external).
  !     
          <P>
  !     
    <DT>Old behavior
    
      <DD>NCSA httpd 1.3 would return some boring old error/problem message 
  --- 29,37 ----
          response, then this response can be replaced with either some
          friendlier text or by a redirection to another URL (local or
          external).
  !         
          <P>
  !         
    <DT>Old behavior
    
      <DD>NCSA httpd 1.3 would return some boring old error/problem message 
  
  
  
  1.30      +6 -6      apache/htdocs/manual/new_features_1_2.html
  
  Index: new_features_1_2.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/new_features_1_2.html,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -C3 -r1.29 -r1.30
  *** new_features_1_2.html     1997/06/04 11:07:51     1.29
  --- new_features_1_2.html     1997/06/24 18:39:31     1.30
  ***************
  *** 193,204 ****
    <li><b><a href="mod/mod_proxy.html">Optional proxy module</a></b><br>
    An improved FTP, HTTP, and CONNECT mode SSL proxy is included with
    Apache 1.2. Some of the changes visible to users:
  !     <dl><dl>
  !     <dt>- Improved FTP proxy supporting PASV mode
  !     <dt>- ProxyBlock directive for excluding sites to proxy
  !     <dt>- NoCache * directive for disabling proxy caching
  !     <dt>- Numerous bug fixes
  !     </dl></dl>
    
    </ul>
    
  --- 193,204 ----
    <li><b><a href="mod/mod_proxy.html">Optional proxy module</a></b><br>
    An improved FTP, HTTP, and CONNECT mode SSL proxy is included with
    Apache 1.2. Some of the changes visible to users:
  !         <dl><dl>
  !         <dt>- Improved FTP proxy supporting PASV mode
  !         <dt>- ProxyBlock directive for excluding sites to proxy
  !         <dt>- NoCache * directive for disabling proxy caching
  !         <dt>- Numerous bug fixes
  !         </dl></dl>
    
    </ul>
    
  
  
  
  1.9       +3 -3      apache/htdocs/manual/process-model.html
  
  Index: process-model.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/process-model.html,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -C3 -r1.8 -r1.9
  *** process-model.html        1997/06/04 11:07:51     1.8
  --- process-model.html        1997/06/24 18:39:31     1.9
  ***************
  *** 39,47 ****
    The defaults for each variable are:
    
    <PRE>
  ! MinSpareServers             5
  ! MaxSpareServers             10
  ! StartServers                5
    </PRE>
    
    There is an absolute maximum number of simultaneous children defined
  --- 39,47 ----
    The defaults for each variable are:
    
    <PRE>
  ! MinSpareServers         5
  ! MaxSpareServers         10
  ! StartServers            5
    </PRE>
    
    There is an absolute maximum number of simultaneous children defined
  
  
  
  1.12      +157 -156  apache/htdocs/manual/suexec.html
  
  Index: suexec.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/suexec.html,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -C3 -r1.11 -r1.12
  *** suexec.html       1997/06/05 20:07:19     1.11
  --- suexec.html       1997/06/24 18:39:31     1.12
  ***************
  *** 17,30 ****
    
    <P ALIGN="LEFT">
    <OL>
  !     <LH><BIG><STRONG>CONTENTS</STRONG></BIG></LH>
  !     <LI><A HREF="#what">What is suEXEC?</A></LI>
  !     <LI><A HREF="#before">Before we begin.</A></LI>
  !     <LI><A HREF="#model">suEXEC Security Model.</A></LI>
  !     <LI><A HREF="#install">Configuring & Installing suEXEC</A></LI>
  !     <LI><A HREF="#enable">Enabling & Disabling suEXEC</A></LI>
  !     <LI><A HREF="#debug">Debugging suEXEC</A></LI>
  !     <LI><A HREF="#jabberwock">Beware the Jabberwock: Warnings & 
Examples</A></LI>
    </OL>
    </P>
    
  --- 17,31 ----
    
    <P ALIGN="LEFT">
    <OL>
  !         <LH><BIG><STRONG>CONTENTS</STRONG></BIG></LH>
  !         <LI><A HREF="#what">What is suEXEC?</A></LI>
  !         <LI><A HREF="#before">Before we begin.</A></LI>
  !         <LI><A HREF="#model">suEXEC Security Model.</A></LI>
  !         <LI><A HREF="#install">Configuring &amp; Installing suEXEC</A></LI>
  !         <LI><A HREF="#enable">Enabling &amp; Disabling suEXEC</A></LI>
  !         <LI><A HREF="#debug">Debugging suEXEC</A></LI>
  !         <LI><A HREF="#jabberwock">Beware the Jabberwock: Warnings &amp;
  !          Examples</A></LI> 
    </OL>
    </P>
    
  ***************
  *** 119,242 ****
    The wrapper then employs the following process to determine success or
    failure -- if any one of these conditions fail, the program logs the failure
    and exits with an error, otherwise it will continue:
  !     <OL>
  !     <LI><STRONG>Was the wrapper called with the proper number of 
arguments?</STRONG>
  !     <BLOCKQUOTE>
  !     The wrapper will only execute if it is given the proper number of 
arguments.
  !     The proper argument format is known to the Apache web server.  If the 
wrapper
  !     is not receiving the proper number of arguments, it is either being 
hacked, or
  !     there is something wrong with the suEXEC portion of your Apache binary.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the user executing this wrapper a valid user of this 
system?</STRONG>
  !     <BLOCKQUOTE>
  !     This is to ensure that the user executing the wrapper is truly a user 
of the system.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is this valid user allowed to run the wrapper?</STRONG>
  !     <BLOCKQUOTE>
  !     Is this user the user allowed to run this wrapper?  Only one user (the 
Apache
  !     user) is allowed to execute this program.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Does the target program have an unsafe hierarchical 
reference?</STRONG>
  !     <BLOCKQUOTE>
  !     Does the target program contain a leading '/' or have a '..' 
backreference?  These
  !     are not allowed; the target program must reside within the Apache 
webspace.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target user name valid?</STRONG>
  !     <BLOCKQUOTE>
  !     Does the target user exist?
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target group name valid?</STRONG>
  !     <BLOCKQUOTE>
  !     Does the target group exist?
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target user <EM>NOT</EM> superuser?</STRONG>
  !     <BLOCKQUOTE>
  !     Presently, suEXEC does not allow 'root' to execute CGI/SSI programs.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target userid <EM>ABOVE</EM> the minimum ID 
number?</STRONG>
  !     <BLOCKQUOTE>
  !     The minimum user ID number is specified during configuration.  This 
allows you
  !     to set the lowest possible userid that will be allowed to execute 
CGI/SSI programs.
  !     This is useful to block out "system" accounts.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target group <EM>NOT</EM> the superuser 
group?</STRONG>
  !     <BLOCKQUOTE>
  !     Presently, suEXEC does not allow the 'root' group to execute CGI/SSI 
programs.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target groupid <EM>ABOVE</EM> the minimum ID 
number?</STRONG>
  !     <BLOCKQUOTE>
  !     The minimum group ID number is specified during configuration.  This 
allows you
  !     to set the lowest possible groupid that will be allowed to execute 
CGI/SSI programs.
  !     This is useful to block out "system" groups.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Can the wrapper successfully become the target user and 
group?</STRONG>
  !     <BLOCKQUOTE>
  !     Here is where the program becomes the target user and group via setuid 
and setgid
  !     calls.  The group access list is also initialized with all of the 
groups of which
  !     the user is a member.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Does the directory in which the program resides 
exist?</STRONG>
  !     <BLOCKQUOTE>
  !     If it doesn't exist, it can't very well contain files.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the directory within the Apache webspace?</STRONG>
  !     <BLOCKQUOTE>
  !     If the request is for a regular portion of the server, is the requested 
directory
  !     within the server's document root?  If the request is for a UserDir, is 
the requested
  !     directory within the user's document root?
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the directory <EM>NOT</EM> writable by anyone 
else?</STRONG>
  !     <BLOCKQUOTE>
  !     We don't want to open up the directory to others; only the owner user 
may be able
  !     to alter this directories contents.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Does the target program exist?</STRONG>
  !     <BLOCKQUOTE>
  !     If it doesn't exists, it can't very well be executed.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target program <EM>NOT</EM> writable by anyone 
else?</STRONG>
  !     <BLOCKQUOTE>
  !     We don't want to give anyone other than the owner the ability to change 
the program.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target program <EM>NOT</EM> setuid or 
setgid?</STRONG>
  !     <BLOCKQUOTE>
  !     We do not want to execute programs that will then change our UID/GID 
again.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Is the target user/group the same as the program's 
user/group?</STRONG>
  !     <BLOCKQUOTE>
  !     Is the user the owner of the file?
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Can we successfully clean the process environment to ensure 
safe operations?</STRONG>
  !     <BLOCKQUOTE>
  !     suEXEC cleans the process' environment by establishing a safe execution 
PATH (defined
  !     during configuration), as well as only passing through those variables 
whose names
  !     are listed in the safe environment list (also created during 
configuration).
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI><STRONG>Can we successfully become the target program and 
execute?</STRONG>
  !     <BLOCKQUOTE>
  !     Here is where suEXEC ends and the target program begins.
  !     </BLOCKQUOTE>
  !     </LI>
  !     </OL>
    </P>
    
    <P ALIGN="LEFT">
  --- 120,243 ----
    The wrapper then employs the following process to determine success or
    failure -- if any one of these conditions fail, the program logs the failure
    and exits with an error, otherwise it will continue:
  !         <OL>
  !         <LI><STRONG>Was the wrapper called with the proper number of 
arguments?</STRONG>
  !         <BLOCKQUOTE>
  !         The wrapper will only execute if it is given the proper number of 
arguments.
  !         The proper argument format is known to the Apache web server.  If 
the wrapper
  !         is not receiving the proper number of arguments, it is either being 
hacked, or
  !         there is something wrong with the suEXEC portion of your Apache 
binary.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the user executing this wrapper a valid user of this 
system?</STRONG>
  !         <BLOCKQUOTE>
  !         This is to ensure that the user executing the wrapper is truly a 
user of the system.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is this valid user allowed to run the wrapper?</STRONG>
  !         <BLOCKQUOTE>
  !         Is this user the user allowed to run this wrapper?  Only one user 
(the Apache
  !         user) is allowed to execute this program.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Does the target program have an unsafe hierarchical 
reference?</STRONG>
  !         <BLOCKQUOTE>
  !         Does the target program contain a leading '/' or have a '..' 
backreference?  These
  !         are not allowed; the target program must reside within the Apache 
webspace.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target user name valid?</STRONG>
  !         <BLOCKQUOTE>
  !         Does the target user exist?
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target group name valid?</STRONG>
  !         <BLOCKQUOTE>
  !         Does the target group exist?
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target user <EM>NOT</EM> superuser?</STRONG>
  !         <BLOCKQUOTE>
  !         Presently, suEXEC does not allow 'root' to execute CGI/SSI programs.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target userid <EM>ABOVE</EM> the minimum ID 
number?</STRONG>
  !         <BLOCKQUOTE>
  !         The minimum user ID number is specified during configuration.  This 
allows you
  !         to set the lowest possible userid that will be allowed to execute 
CGI/SSI programs.
  !         This is useful to block out "system" accounts.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target group <EM>NOT</EM> the superuser 
group?</STRONG>
  !         <BLOCKQUOTE>
  !         Presently, suEXEC does not allow the 'root' group to execute 
CGI/SSI programs.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target groupid <EM>ABOVE</EM> the minimum ID 
number?</STRONG>
  !         <BLOCKQUOTE>
  !         The minimum group ID number is specified during configuration.  
This allows you
  !         to set the lowest possible groupid that will be allowed to execute 
CGI/SSI programs.
  !         This is useful to block out "system" groups.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Can the wrapper successfully become the target user and 
group?</STRONG>
  !         <BLOCKQUOTE>
  !         Here is where the program becomes the target user and group via 
setuid and setgid
  !         calls.  The group access list is also initialized with all of the 
groups of which
  !         the user is a member.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Does the directory in which the program resides 
exist?</STRONG>
  !         <BLOCKQUOTE>
  !         If it doesn't exist, it can't very well contain files.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the directory within the Apache webspace?</STRONG>
  !         <BLOCKQUOTE>
  !         If the request is for a regular portion of the server, is the 
requested directory
  !         within the server's document root?  If the request is for a 
UserDir, is the requested
  !         directory within the user's document root?
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the directory <EM>NOT</EM> writable by anyone 
else?</STRONG>
  !         <BLOCKQUOTE>
  !         We don't want to open up the directory to others; only the owner 
user may be able
  !         to alter this directories contents.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Does the target program exist?</STRONG>
  !         <BLOCKQUOTE>
  !         If it doesn't exists, it can't very well be executed.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target program <EM>NOT</EM> writable by anyone 
else?</STRONG>
  !         <BLOCKQUOTE>
  !         We don't want to give anyone other than the owner the ability to 
change the program.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target program <EM>NOT</EM> setuid or 
setgid?</STRONG>
  !         <BLOCKQUOTE>
  !         We do not want to execute programs that will then change our 
UID/GID again.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Is the target user/group the same as the program's 
user/group?</STRONG>
  !         <BLOCKQUOTE>
  !         Is the user the owner of the file?
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Can we successfully clean the process environment to 
ensure safe operations?</STRONG>
  !         <BLOCKQUOTE>
  !         suEXEC cleans the process' environment by establishing a safe 
execution PATH (defined
  !         during configuration), as well as only passing through those 
variables whose names
  !         are listed in the safe environment list (also created during 
configuration).
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI><STRONG>Can we successfully become the target program and 
execute?</STRONG>
  !         <BLOCKQUOTE>
  !         Here is where suEXEC ends and the target program begins.
  !         </BLOCKQUOTE>
  !         </LI>
  !         </OL>
    </P>
    
    <P ALIGN="LEFT">
  ***************
  *** 257,263 ****
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="install">Configuring & Installing suEXEC</A></H3>
    <P ALIGN="LEFT">
    Here's where we begin the fun.  The configuration and installation of 
suEXEC is
    a four step process: edit the suEXEC header file, compile suEXEC, place the
  --- 258,264 ----
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="install">Configuring &amp; Installing suEXEC</A></H3>
    <P ALIGN="LEFT">
    Here's where we begin the fun.  The configuration and installation of 
suEXEC is
    a four step process: edit the suEXEC header file, compile suEXEC, place the
  ***************
  *** 396,402 ****
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="enable">Enabling & Disabling suEXEC</A></H3>
    <P ALIGN="LEFT">
    After properly installing the <STRONG>suexec</STRONG> wrapper
    executable, you must kill and restart the Apache server.  A simple
  --- 397,403 ----
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="enable">Enabling &amp; Disabling suEXEC</A></H3>
    <P ALIGN="LEFT">
    After properly installing the <STRONG>suexec</STRONG> wrapper
    executable, you must kill and restart the Apache server.  A simple
  ***************
  *** 454,460 ****
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="jabberwock">Beware the Jabberwock: Warnings & Examples</A></H3>
    <P ALIGN="LEFT">
    <STRONG>NOTE!</STRONG>  This section may not be complete.  For the latest
    revision of this section of the documentation, see the Apache Group's
  --- 455,461 ----
    <STRONG><A HREF="suexec.html">BACK TO CONTENTS</A></STRONG>
    </P>
    
  ! <H3><A NAME="jabberwock">Beware the Jabberwock: Warnings &amp; 
Examples</A></H3>
    <P ALIGN="LEFT">
    <STRONG>NOTE!</STRONG>  This section may not be complete.  For the latest
    revision of this section of the documentation, see the Apache Group's
  ***************
  *** 467,499 ****
    limitations on server setup.  Please review these before submitting any
    "bugs" regarding suEXEC.
    <UL>
  !     <LH><STRONG>suEXEC Points Of Interest</STRONG></LH>
  !     <LI>Hierarchy limitations
  !     <BLOCKQUOTE>
  !     For security and efficiency reasons, all suexec requests must
  !     remain within either a top-level document root for virtual
  !     host requests, or one top-level personal document root for
  !     userdir requests.  For example, if you have four VirtualHosts
  !     configured, you would need to structure all of your VHosts'
  !     document roots off of one main Apache document hierarchy to
  !     take advantage of suEXEC for VirtualHosts. (Example forthcoming.)
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI>suEXEC's PATH environment variable
  !     <BLOCKQUOTE>
  !     This can be a dangerous thing to change.  Make certain every
  !     path you include in this define is a <STRONG>trusted</STRONG>
  !     directory.  You don't want to open people up to having someone
  !     from across the world running a trojan horse on them.
  !     </BLOCKQUOTE>
  !     </LI>
  !     <LI>Altering the suEXEC code
  !     <BLOCKQUOTE>
  !     Again, this can cause <STRONG>Big Trouble</STRONG> if you try
  !     this without knowing what you are doing.  Stay away from it
  !     if at all possible.
  !     </BLOCKQUOTE>
  !     </LI>
    </UL>
    
    <P ALIGN="CENTER">
  --- 468,500 ----
    limitations on server setup.  Please review these before submitting any
    "bugs" regarding suEXEC.
    <UL>
  !         <LH><STRONG>suEXEC Points Of Interest</STRONG></LH>
  !         <LI>Hierarchy limitations
  !         <BLOCKQUOTE>
  !         For security and efficiency reasons, all suexec requests must
  !         remain within either a top-level document root for virtual
  !         host requests, or one top-level personal document root for
  !         userdir requests.  For example, if you have four VirtualHosts
  !         configured, you would need to structure all of your VHosts'
  !         document roots off of one main Apache document hierarchy to
  !         take advantage of suEXEC for VirtualHosts. (Example forthcoming.)
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI>suEXEC's PATH environment variable
  !         <BLOCKQUOTE>
  !         This can be a dangerous thing to change.  Make certain every
  !         path you include in this define is a <STRONG>trusted</STRONG>
  !         directory.  You don't want to open people up to having someone
  !         from across the world running a trojan horse on them.
  !         </BLOCKQUOTE>
  !         </LI>
  !         <LI>Altering the suEXEC code
  !         <BLOCKQUOTE>
  !         Again, this can cause <STRONG>Big Trouble</STRONG> if you try
  !         this without knowing what you are doing.  Stay away from it
  !         if at all possible.
  !         </BLOCKQUOTE>
  !         </LI>
    </UL>
    
    <P ALIGN="CENTER">
  
  
  
  1.13      +2 -2      apache/htdocs/manual/virtual-host.html
  
  Index: virtual-host.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/virtual-host.html,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -C3 -r1.12 -r1.13
  *** virtual-host.html 1997/06/04 11:07:52     1.12
  --- virtual-host.html 1997/06/24 18:39:32     1.13
  ***************
  *** 186,194 ****
    "rlimit" to some large number, like 512.  
    <LI>Edit http_main.c to add calls to setrlimit() from main(), along the 
lines of
    <PRE>
  !     struct rlimit rlp;
    
  !     rlp.rlim_cur = rlp.rlim_max = 512;
            if (setrlimit(RLIMIT_NPROC, &rlp)) {
                fprintf(stderr, "setrlimit(RLIMIT_NPROC) failed.\n");
                exit(1);
  --- 186,194 ----
    "rlimit" to some large number, like 512.  
    <LI>Edit http_main.c to add calls to setrlimit() from main(), along the 
lines of
    <PRE>
  !         struct rlimit rlp;
    
  !         rlp.rlim_cur = rlp.rlim_max = 512;
            if (setrlimit(RLIMIT_NPROC, &rlp)) {
                fprintf(stderr, "setrlimit(RLIMIT_NPROC) failed.\n");
                exit(1);
  
  
  
  1.8       +57 -57    apache/htdocs/manual/misc/fin_wait_2.html
  
  Index: fin_wait_2.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/misc/fin_wait_2.html,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -C3 -r1.7 -r1.8
  *** fin_wait_2.html   1997/06/04 11:42:56     1.7
  --- fin_wait_2.html   1997/06/24 18:39:34     1.8
  ***************
  *** 57,69 ****
    connection stays in the FIN_WAIT_2 state until one of the following
    happens:<P>
    <UL>
  !     <LI>The client opens a new connection to the same or a different
  !         site, which causes it to fully close the older connection on
                that socket.
  !     <LI>The user exits the client, which on some (most?) clients
  !         causes the OS to fully shutdown the connection.
  !     <LI>The FIN_WAIT_2 times out, on servers that have a timeout
  !         for this state.
    </UL><P>
    If you are lucky, this means that the buggy client will fully close the
    connection and release the resources on your server.  However, there
  --- 57,69 ----
    connection stays in the FIN_WAIT_2 state until one of the following
    happens:<P>
    <UL>
  !         <LI>The client opens a new connection to the same or a different
  !             site, which causes it to fully close the older connection on
                that socket.
  !         <LI>The user exits the client, which on some (most?) clients
  !             causes the OS to fully shutdown the connection.
  !         <LI>The FIN_WAIT_2 times out, on servers that have a timeout
  !             for this state.
    </UL><P>
    If you are lucky, this means that the buggy client will fully close the
    connection and release the resources on your server.  However, there
  ***************
  *** 77,92 ****
    
    The clients on which this problem has been verified to exist:<P>
    <UL>
  !     <LI>Mozilla/3.01 (X11; I; FreeBSD 2.1.5-RELEASE i386)
  !     <LI>Mozilla/2.02 (X11; I; FreeBSD 2.1.5-RELEASE i386)
  !     <LI>Mozilla/3.01Gold (X11; I; SunOS 5.5 sun4m)
  !     <LI>MSIE 3.01 on the Macintosh
  !     <LI>MSIE 3.01 on Windows 95
    </UL><P>
    
    This does not appear to be a problem on:
    <UL>
  !     <LI>Mozilla/3.01 (Win95; I)
    </UL>
    <P>
    
  --- 77,92 ----
    
    The clients on which this problem has been verified to exist:<P>
    <UL>
  !         <LI>Mozilla/3.01 (X11; I; FreeBSD 2.1.5-RELEASE i386)
  !         <LI>Mozilla/2.02 (X11; I; FreeBSD 2.1.5-RELEASE i386)
  !         <LI>Mozilla/3.01Gold (X11; I; SunOS 5.5 sun4m)
  !         <LI>MSIE 3.01 on the Macintosh
  !         <LI>MSIE 3.01 on Windows 95
    </UL><P>
    
    This does not appear to be a problem on:
    <UL>
  !         <LI>Mozilla/3.01 (Win95; I)
    </UL>
    <P>
    
  ***************
  *** 155,210 ****
    The following systems are known to have a timeout:
    <P>
    <UL>
  !     <LI><A HREF="http://www.freebsd.org/";>FreeBSD</A> versions starting at 
2.0 or possibly earlier.
  !     <LI><A HREF="http://www.netbsd.org/";>NetBSD</A> version 1.2(?)
  !     <LI><A HREF="http://www.openbsd.org/";>OpenBSD</A> all versions(?)
  !     <LI><A HREF="http://www.bsdi.com/";>BSD/OS</A> 2.1, with the 
  !         <A HREF="ftp://ftp.bsdi.com/bsdi/patches/patches-2.1/K210-027";>
  !         K210-027</A> patch installed.  
  !     <LI><A HREF="http://www.sun.com/";>Solaris</A> as of around version
  !         2.2.  The timeout can be tuned by using <CODE>ndd</CODE> to 
  !         modify <CODE>tcp_fin_wait_2_flush_interval</CODE>, but the
  !         default should be appropriate for most servers and improper 
  !         tuning can have negative impacts.
  !     <LI><A HREF="http://www.sco.com/";>SCO TCP/IP Release 1.2.1</A>
  !         can be modified to have a timeout by following
  !         <A 
HREF="http://www.sco.com/cgi-bin/waisgate?WAISdocID=2242622956+0+0+0&WAISaction=retrieve";>
 SCO's instructions</A>.
  !     <LI><A HREF="http://www.linux.org/";>Linux</A> 2.0.x and
  !         earlier(?)
  !     <LI><A HREF="http://www.hp.com/";>HP-UX</A> 10.x defaults to 
  !         terminating connections in the FIN_WAIT_2 state after the 
  !         normal keepalive timeouts.  This does not
  !         refer to the persistent connection or HTTP keepalive
  !         timeouts, but the <CODE>SO_LINGER</CODE> socket option 
  !         which is enabled by Apache.  This parameter can be adjusted 
  !         by using <CODE>nettune</CODE> to modify parameters such as
  !         <CODE>tcp_keepstart</CODE> and <CODE>tcp_keepstop</CODE>.
  !         In later revisions, there is an explicit timer for
  !         connections in FIN_WAIT_2 that can be modified; contact HP
  !         support for details.
  !     <LI><A HREF="http://www.sgi.com/";>SGI IRIX</A> can be patched to
  !         support a timeout.  For IRIX 5.3, 6.2, and 6.3, 
  !         use patches 1654, 1703 and 1778 respectively.  If you
  !         have trouble locating these patches, please contact your
  !         SGI support channel for help.
  !     <LI><A HREF="http://www.ncr.com/";>NCR's MP RAS Unix</A> 2.xx and
  !         3.xx both have FIN_WAIT_2 timeouts.  In 2.xx it is non-tunable
  !         at 600 seconds, while in 3.xx it defaults to 600 seconds and
  !         is calculated based on the tunable "max keep alive probes" 
  !         (default of 8) multiplied by the "keep alive interval" (default
  !         75 seconds).
  !     <LI><A HREF="http://www.sequent.com";>Squent's ptx/TCP/IP for
  !         DYNIX/ptx</A> has had a FIN_WAIT_2 timeout since around
  !         release 4.1 in mid-1994.
    </UL>
    <P>
    The following systems are known to not have a timeout:
    <P>
    <UL>
  !     <LI><A HREF="http://www.sun.com/";>SunOS 4.x</A> does not and
  !         almost certainly never will have one because it as at the
  !         very end of its development cycle for Sun.  If you have kernel
  !         source should be easy to patch.
    </UL>
    <P>
    There is a 
  --- 155,210 ----
    The following systems are known to have a timeout:
    <P>
    <UL>
  !         <LI><A HREF="http://www.freebsd.org/";>FreeBSD</A> versions starting 
at 2.0 or possibly earlier.
  !         <LI><A HREF="http://www.netbsd.org/";>NetBSD</A> version 1.2(?)
  !         <LI><A HREF="http://www.openbsd.org/";>OpenBSD</A> all versions(?)
  !         <LI><A HREF="http://www.bsdi.com/";>BSD/OS</A> 2.1, with the 
  !             <A HREF="ftp://ftp.bsdi.com/bsdi/patches/patches-2.1/K210-027";>
  !             K210-027</A> patch installed.  
  !         <LI><A HREF="http://www.sun.com/";>Solaris</A> as of around version
  !             2.2.  The timeout can be tuned by using <CODE>ndd</CODE> to 
  !             modify <CODE>tcp_fin_wait_2_flush_interval</CODE>, but the
  !             default should be appropriate for most servers and improper 
  !             tuning can have negative impacts.
  !         <LI><A HREF="http://www.sco.com/";>SCO TCP/IP Release 1.2.1</A>
  !             can be modified to have a timeout by following
  !             <A 
HREF="http://www.sco.com/cgi-bin/waisgate?WAISdocID=2242622956+0+0+0&WAISaction=retrieve";>
 SCO's instructions</A>.
  !         <LI><A HREF="http://www.linux.org/";>Linux</A> 2.0.x and
  !             earlier(?)
  !         <LI><A HREF="http://www.hp.com/";>HP-UX</A> 10.x defaults to 
  !             terminating connections in the FIN_WAIT_2 state after the 
  !             normal keepalive timeouts.  This does not
  !             refer to the persistent connection or HTTP keepalive
  !             timeouts, but the <CODE>SO_LINGER</CODE> socket option 
  !             which is enabled by Apache.  This parameter can be adjusted 
  !             by using <CODE>nettune</CODE> to modify parameters such as
  !             <CODE>tcp_keepstart</CODE> and <CODE>tcp_keepstop</CODE>.
  !             In later revisions, there is an explicit timer for
  !             connections in FIN_WAIT_2 that can be modified; contact HP
  !             support for details.
  !         <LI><A HREF="http://www.sgi.com/";>SGI IRIX</A> can be patched to
  !             support a timeout.  For IRIX 5.3, 6.2, and 6.3, 
  !             use patches 1654, 1703 and 1778 respectively.  If you
  !             have trouble locating these patches, please contact your
  !             SGI support channel for help.
  !         <LI><A HREF="http://www.ncr.com/";>NCR's MP RAS Unix</A> 2.xx and
  !             3.xx both have FIN_WAIT_2 timeouts.  In 2.xx it is non-tunable
  !             at 600 seconds, while in 3.xx it defaults to 600 seconds and
  !             is calculated based on the tunable "max keep alive probes" 
  !             (default of 8) multiplied by the "keep alive interval" (default
  !             75 seconds).
  !         <LI><A HREF="http://www.sequent.com";>Squent's ptx/TCP/IP for
  !             DYNIX/ptx</A> has had a FIN_WAIT_2 timeout since around
  !             release 4.1 in mid-1994.
    </UL>
    <P>
    The following systems are known to not have a timeout:
    <P>
    <UL>
  !         <LI><A HREF="http://www.sun.com/";>SunOS 4.x</A> does not and
  !             almost certainly never will have one because it as at the
  !             very end of its development cycle for Sun.  If you have kernel
  !             source should be easy to patch.
    </UL>
    <P>
    There is a 
  
  
  
  1.5       +14 -14    apache/htdocs/manual/misc/index.html
  
  Index: index.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/misc/index.html,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -C3 -r1.4 -r1.5
  *** index.html        1997/06/04 11:42:57     1.4
  --- index.html        1997/06/24 18:39:34     1.5
  ***************
  *** 21,112 ****
      </P>
      <DL>
       <DT><A
  !             HREF="API.html"
           >API</A>
       </DT>
       <DD>Description of Apache's Application Programming Interface.
       </DD>
       <DT><A
  !             HREF="FAQ.html"
           >FAQ</A>
       </DT>
       <DD>Frequently-Asked Questions concerning the Apache project and server
       </DD>
       <DT><A
  !             HREF="client_block_api.html"
           >Reading Client Input in Apache 1.2</A>
       </DT>
       <DD>Describes differences between Apache 1.1 and 1.2 in how modules
        read information from the client
       </DD>
       <DT><A
  !             HREF="compat_notes.html"
           >Compatibility with NCSA</A>
       </DT>
       <DD>Notes about Apache's compatibility with the NCSA server
       </DD>
       <DT><A
  !             HREF="fin_wait_2.html"
           ><SAMP>FIN_WAIT_2</SAMP></A>
       </DT>
       <DD>A description of the causes of Apache processes going into the
        <SAMP>FIN_WAIT_2</SAMP> state, and what you can do about it
       </DD>
       <DT><A
  !             HREF="howto.html"
           >&quot;How-To&quot;</A>
       </DT>
       <DD>Instructions about how to accomplish some commonly-desired server
        functionality changes
       </DD>
       <DT><A
  !             HREF="known_bugs.html"
           >Known Bugs</A>
       </DT>
       <DD>Just what it says - a list of known bugs in each of the Apache 
releases
       </DD>
       <DT><A
  !             HREF="nopgp.html"
           >No PGP</A>
       </DT>
       <DD>Why we took PEM and PGP support out of the base Apache distribution
       </DD>
       <DT><A
  !             HREF="perf-bsd44.html"
           >Performance Notes (BSD 4.4)</A>
       </DT>
       <DD>Some notes about ways to improve/optimize Apache performance on
        BSD 4.4 systems
       </DD>
       <DT><A
  !             HREF="perf-dec.html"
           >Performance Notes (Digital UNIX)</A>
       </DT>
       <DD>Extracts of USENET postings describing how to optimize Apache
        performance on Digital UNIX systems
       </DD>
       <DT><A
  !             HREF="perf.html"
           >Performance Notes (General)</A>
       </DT>
       <DD>Some generic notes about how to improve Apache performance
       </DD>
       <DT><A
  !             HREF="security_tips.html"
           >Security Tips</A>
       </DT>
       <DD>Some &quot;do&quot;s  - and &quot;don't&quot;s - for keeping your
        Apache web site secure
       </DD>
       <DT><A
  !             HREF="vif-info.html"
           >Virtual Hosts (IP-based)</A>
       </DT>
       <DD>Excerpts and notes about configuring and using Apache IP-based 
virtual
        hosts
       </DD>
       <DT><A
  !             HREF="windoz_keepalive.html"
           >Windows Bug with Web Keepalive</A>
       </DT>
       <DD>A brief description of a known problem with Microsoft Windows and
  --- 21,112 ----
      </P>
      <DL>
       <DT><A
  !         HREF="API.html"
           >API</A>
       </DT>
       <DD>Description of Apache's Application Programming Interface.
       </DD>
       <DT><A
  !         HREF="FAQ.html"
           >FAQ</A>
       </DT>
       <DD>Frequently-Asked Questions concerning the Apache project and server
       </DD>
       <DT><A
  !         HREF="client_block_api.html"
           >Reading Client Input in Apache 1.2</A>
       </DT>
       <DD>Describes differences between Apache 1.1 and 1.2 in how modules
        read information from the client
       </DD>
       <DT><A
  !         HREF="compat_notes.html"
           >Compatibility with NCSA</A>
       </DT>
       <DD>Notes about Apache's compatibility with the NCSA server
       </DD>
       <DT><A
  !         HREF="fin_wait_2.html"
           ><SAMP>FIN_WAIT_2</SAMP></A>
       </DT>
       <DD>A description of the causes of Apache processes going into the
        <SAMP>FIN_WAIT_2</SAMP> state, and what you can do about it
       </DD>
       <DT><A
  !         HREF="howto.html"
           >&quot;How-To&quot;</A>
       </DT>
       <DD>Instructions about how to accomplish some commonly-desired server
        functionality changes
       </DD>
       <DT><A
  !         HREF="known_bugs.html"
           >Known Bugs</A>
       </DT>
       <DD>Just what it says - a list of known bugs in each of the Apache 
releases
       </DD>
       <DT><A
  !         HREF="nopgp.html"
           >No PGP</A>
       </DT>
       <DD>Why we took PEM and PGP support out of the base Apache distribution
       </DD>
       <DT><A
  !         HREF="perf-bsd44.html"
           >Performance Notes (BSD 4.4)</A>
       </DT>
       <DD>Some notes about ways to improve/optimize Apache performance on
        BSD 4.4 systems
       </DD>
       <DT><A
  !         HREF="perf-dec.html"
           >Performance Notes (Digital UNIX)</A>
       </DT>
       <DD>Extracts of USENET postings describing how to optimize Apache
        performance on Digital UNIX systems
       </DD>
       <DT><A
  !         HREF="perf.html"
           >Performance Notes (General)</A>
       </DT>
       <DD>Some generic notes about how to improve Apache performance
       </DD>
       <DT><A
  !         HREF="security_tips.html"
           >Security Tips</A>
       </DT>
       <DD>Some &quot;do&quot;s  - and &quot;don't&quot;s - for keeping your
        Apache web site secure
       </DD>
       <DT><A
  !         HREF="vif-info.html"
           >Virtual Hosts (IP-based)</A>
       </DT>
       <DD>Excerpts and notes about configuring and using Apache IP-based 
virtual
        hosts
       </DD>
       <DT><A
  !         HREF="windoz_keepalive.html"
           >Windows Bug with Web Keepalive</A>
       </DT>
       <DD>A brief description of a known problem with Microsoft Windows and
  
  
  
  1.5       +1 -1      apache/htdocs/manual/misc/nopgp.html
  
  Index: nopgp.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/misc/nopgp.html,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -C3 -r1.4 -r1.5
  *** nopgp.html        1997/06/12 23:26:17     1.4
  --- nopgp.html        1997/06/24 18:39:35     1.5
  ***************
  *** 81,87 ****
    ICLU - Your Rights in Cyberspace</A>
    </UL>
    
  !     <a href="http://www.behlendorf.com/~brian/";>Brian</a>, <a 
href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
    
    <!--#include virtual="footer.html" -->
    </BODY>
  --- 81,87 ----
    ICLU - Your Rights in Cyberspace</A>
    </UL>
    
  !         <a href="http://www.behlendorf.com/~brian/";>Brian</a>, <a 
href="mailto:[EMAIL PROTECTED]">[EMAIL PROTECTED]</a>
    
    <!--#include virtual="footer.html" -->
    </BODY>
  
  
  
  1.10      +2 -2      apache/htdocs/manual/misc/perf.html
  
  Index: perf.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/misc/perf.html,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -C3 -r1.9 -r1.10
  *** perf.html 1997/06/12 23:26:18     1.9
  --- perf.html 1997/06/24 18:39:35     1.10
  ***************
  *** 61,69 ****
    
    <UL> 
      <LI><A 
HREF="http://www.digital.com/info/internet/document/ias/tuning.html";>DIGITAL
  !     UNIX Tuning Parameters for Web Servers</A> 
      <LI>We have some <A HREF="perf-dec.html">newsgroup postings</A> on how to 
tune 
  !     Digital UNIX 3.2 and 4.0. 
    </UL>
    
    <P><HR>
  --- 61,69 ----
    
    <UL> 
      <LI><A 
HREF="http://www.digital.com/info/internet/document/ias/tuning.html";>DIGITAL
  !         UNIX Tuning Parameters for Web Servers</A> 
      <LI>We have some <A HREF="perf-dec.html">newsgroup postings</A> on how to 
tune 
  !         Digital UNIX 3.2 and 4.0. 
    </UL>
    
    <P><HR>
  
  
  
  1.7       +137 -137  apache/htdocs/manual/misc/vif-info.html
  
  Index: vif-info.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/misc/vif-info.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -C3 -r1.6 -r1.7
  *** vif-info.html     1997/06/04 11:42:59     1.6
  --- vif-info.html     1997/06/24 18:39:35     1.7
  ***************
  *** 49,63 ****
    that these are three distinct class C addresses in three distinct
    class C nets). Here are the ifconfigs:
    
  !   ifconfig le0 198.3.2.1 up -trailers       # config primary interface
    
  !   ifconfig vif0 198.4.3.2 up                # config first virtual interface
  !   route delete net 198.4.3 198.4.3.2        # delete spurious route 
  !   route add host 198.4.3.2 198.4.3.2 0      # add route for this i/f
  ! 
  !   ifconfig vif1 198.5.4.3 up                # config second virtual 
interface
  !   route delete net 198.5.4 198.5.4.3        # delete spurious route 
  !   route add host 198.5.4.3 198.5.4.3 0      # add route for this i/f
    
    The route deletes are needed because the ifconfig creates a default
    route to the interface's network, which can cause problems; all that's
  --- 49,63 ----
    that these are three distinct class C addresses in three distinct
    class C nets). Here are the ifconfigs:
    
  !   ifconfig le0 198.3.2.1 up -trailers   # config primary interface
    
  !   ifconfig vif0 198.4.3.2 up            # config first virtual interface
  !   route delete net 198.4.3 198.4.3.2    # delete spurious route 
  !   route add host 198.4.3.2 198.4.3.2 0  # add route for this i/f
  ! 
  !   ifconfig vif1 198.5.4.3 up            # config second virtual interface
  !   route delete net 198.5.4 198.5.4.3    # delete spurious route 
  !   route add host 198.5.4.3 198.5.4.3 0  # add route for this i/f
    
    The route deletes are needed because the ifconfig creates a default
    route to the interface's network, which can cause problems; all that's
  ***************
  *** 91,101 ****
    and netinet/if_vif.h, configure your kernel with the number of
    virtual interfaces you want using a line like:
    
  ! pseudo-device       vif4            # Virtual IP interface
    
    in your configuration file, and the line
    
  ! netinet/if_vif.c    optional vif device-driver
    
    in the "files" file. Also, add the appropriate entries in conf.c, so
    that you can access the if_attach() routine when you open the device:
  --- 91,101 ----
    and netinet/if_vif.h, configure your kernel with the number of
    virtual interfaces you want using a line like:
    
  ! pseudo-device   vif4            # Virtual IP interface
    
    in your configuration file, and the line
    
  ! netinet/if_vif.c        optional vif device-driver
    
    in the "files" file. Also, add the appropriate entries in conf.c, so
    that you can access the if_attach() routine when you open the device:
  ***************
  *** 122,130 ****
    then, way down in the definition for cdevsw[]:
    
    --------------------
  !     vifopen,        vifclose,       vifread,        vifwrite,       /*14*/
  !     vifioctl,       nodev,          nodev,          0,
  !     0,      nodev,
    --------------------
    
    Make sure you remember the correct major device number, 14 in this case!
  --- 122,130 ----
    then, way down in the definition for cdevsw[]:
    
    --------------------
  !         vifopen,        vifclose,       vifread,        vifwrite,       
/*14*/
  !         vifioctl,       nodev,          nodev,          0,
  !         0,      nodev,
    --------------------
    
    Make sure you remember the correct major device number, 14 in this case!
  ***************
  *** 139,150 ****
    ---------------------netinet/if_vif.h--------------------------------------
    typedef struct 
    {
  !     struct ifnet    vif_if;
  !     struct ifnet    *vif_sif;       /* slave interface */
  !     int             vif_flags;
    } vif_softc_t;
    
  ! #define     VIFMTU  (1024+512)
    ---------------------------------------------------------------------------
    
    and
  --- 139,150 ----
    ---------------------netinet/if_vif.h--------------------------------------
    typedef struct 
    {
  !         struct ifnet    vif_if;
  !         struct ifnet    *vif_sif;       /* slave interface */
  !         int             vif_flags;
    } vif_softc_t;
    
  ! #define VIFMTU  (1024+512)
    ---------------------------------------------------------------------------
    
    and
  ***************
  *** 165,171 ****
    #include "../net/netisr.h"
    #include "../net/route.h"
    
  ! #ifdef      INET
    #include "../netinet/in.h"
    #include "../netinet/in_systm.h"
    #include "../netinet/in_var.h"
  --- 165,171 ----
    #include "../net/netisr.h"
    #include "../net/route.h"
    
  ! #ifdef  INET
    #include "../netinet/in.h"
    #include "../netinet/in_systm.h"
    #include "../netinet/in_var.h"
  ***************
  *** 191,315 ****
    
    vifattach()
    {
  !     register int i;
  !     register struct ifnet *ifp;
  !         int vifoutput(), vififioctl();
  !     
  !     for (i=0; i&lt;NVIF; i++)
  !     {
  !             ifp = &vif_softc[i].vif_if;
  !             ifp-&gt;if_name = "vif";
  !             ifp-&gt;if_unit = i;
  !             ifp-&gt;if_mtu = VIFMTU;
  !             ifp-&gt;if_flags = IFF_LOOPBACK | IFF_NOARP;
  !             ifp-&gt;if_ioctl = vififioctl;
  !             ifp-&gt;if_output = vifoutput;
  !             if_attach(ifp);
  !     }
    }
    
    vifopen(dev, flag)
    int dev, flag;
    {
  !     int unit;
  !     
  !     if (!vifs_inited)
  !     {
  !             vifattach();
  !             vifs_inited = 1;
  !             printf("vif initialized\n");
  !     }
  !     
  !     unit = minor(dev);
  !     if ((unit &lt; 0) || (unit &gt;= NVIF))
  !     {
  !             return ENXIO;
  !     }
  !     
  !     return 0;
    }
    
    vifclose(dev, flag)
    int dev, flag;
    {
  !     return 0;
    }
    
    vifread()
    {
  !     return ENXIO;
    }
    
    vifwrite()
    {
  !     return ENXIO;
    }
    
    vifselect()
    {
  !     return ENXIO;
    }
    
    vifoutput(ifp, m0, dst)
  !     struct ifnet *ifp;
  !     register struct mbuf *m0;
  !     struct sockaddr *dst;
  ! {
  !     int s;
  !     register struct ifqueue *ifq;
  !     struct mbuf *m;
  !     struct sockaddr_in *din;
  !     
  !     if (dst-&gt;sa_family != AF_INET)
  !     {
  !             printf("%s%d: can't handle af%d\n", 
  !                    ifp-&gt;if_name, ifp-&gt;if_unit,
  !                    dst-&gt;sa_family);
  !             m_freem(m0);
  !             return (EAFNOSUPPORT);
  !     }
  ! 
  !     din = (struct sockaddr_in *)dst;
  !     
  !     if (din-&gt;sin_addr.s_addr == 
IA_SIN(ifp-&gt;if_addrlist)-&gt;sin_addr.s_addr)
  !     {
  !             /* printf("%s%d: looping\n", ifp-&gt;if_name, ifp-&gt;if_unit); 
*/
  !             
  !             /*
  !              * Place interface pointer before the data
  !              * for the receiving protocol.
  !              */
  !             if (m0-&gt;m_off &lt;= MMAXOFF &&
  !                 m0-&gt;m_off &gt;= MMINOFF + sizeof(struct ifnet *)) {
  !                     m0-&gt;m_off -= sizeof(struct ifnet *);
  !                     m0-&gt;m_len += sizeof(struct ifnet *);
  !             } else {
  !                     MGET(m, M_DONTWAIT, MT_HEADER);
  !                     if (m == (struct mbuf *)0)
  !                       return (ENOBUFS);
  !                     m-&gt;m_off = MMINOFF;
  !                     m-&gt;m_len = sizeof(struct ifnet *);
  !                     m-&gt;m_next = m0;
  !                     m0 = m;
  !             }
  !             *(mtod(m0, struct ifnet **)) = ifp;
  !             s = splimp();
  !             ifp-&gt;if_opackets++;
  !             ifq = &ipintrq;
  !             if (IF_QFULL(ifq)) {
  !                     IF_DROP(ifq);
  !                     m_freem(m0);
  !                     splx(s);
  !                     return (ENOBUFS);
  !             }
  !             IF_ENQUEUE(ifq, m0);
  !             schednetisr(NETISR_IP);
  !             ifp-&gt;if_ipackets++;
  !             splx(s);
  !             return (0);
  !     }
    
  !     return EHOSTUNREACH;
    }
    
    /*
  --- 191,315 ----
    
    vifattach()
    {
  !         register int i;
  !         register struct ifnet *ifp;
  !         int     vifoutput(), vififioctl();
  !         
  !         for (i=0; i&lt;NVIF; i++)
  !         {
  !                 ifp = &vif_softc[i].vif_if;
  !                 ifp-&gt;if_name = "vif";
  !                 ifp-&gt;if_unit = i;
  !                 ifp-&gt;if_mtu = VIFMTU;
  !                 ifp-&gt;if_flags = IFF_LOOPBACK | IFF_NOARP;
  !                 ifp-&gt;if_ioctl = vififioctl;
  !                 ifp-&gt;if_output = vifoutput;
  !                 if_attach(ifp);
  !         }
    }
    
    vifopen(dev, flag)
    int dev, flag;
    {
  !         int unit;
  !         
  !         if (!vifs_inited)
  !         {
  !                 vifattach();
  !                 vifs_inited = 1;
  !                 printf("vif initialized\n");
  !         }
  !         
  !         unit = minor(dev);
  !         if ((unit &lt; 0) || (unit &gt;= NVIF))
  !         {
  !                 return ENXIO;
  !         }
  !         
  !         return 0;
    }
    
    vifclose(dev, flag)
    int dev, flag;
    {
  !         return 0;
    }
    
    vifread()
    {
  !         return ENXIO;
    }
    
    vifwrite()
    {
  !         return ENXIO;
    }
    
    vifselect()
    {
  !         return ENXIO;
    }
    
    vifoutput(ifp, m0, dst)
  !         struct ifnet *ifp;
  !         register struct mbuf *m0;
  !         struct sockaddr *dst;
  ! {
  !         int s;
  !         register struct ifqueue *ifq;
  !         struct mbuf *m;
  !         struct sockaddr_in *din;
  !         
  !         if (dst-&gt;sa_family != AF_INET)
  !         {
  !                 printf("%s%d: can't handle af%d\n", 
  !                        ifp-&gt;if_name, ifp-&gt;if_unit,
  !                        dst-&gt;sa_family);
  !                 m_freem(m0);
  !                 return (EAFNOSUPPORT);
  !         }
  ! 
  !         din = (struct sockaddr_in *)dst;
  !         
  !         if (din-&gt;sin_addr.s_addr == 
IA_SIN(ifp-&gt;if_addrlist)-&gt;sin_addr.s_addr)
  !         {
  !                 /* printf("%s%d: looping\n", ifp-&gt;if_name, 
ifp-&gt;if_unit); */
  !                 
  !                 /*
  !                  * Place interface pointer before the data
  !                  * for the receiving protocol.
  !                  */
  !                 if (m0-&gt;m_off &lt;= MMAXOFF &&
  !                     m0-&gt;m_off &gt;= MMINOFF + sizeof(struct ifnet *)) {
  !                         m0-&gt;m_off -= sizeof(struct ifnet *);
  !                         m0-&gt;m_len += sizeof(struct ifnet *);
  !                 } else {
  !                         MGET(m, M_DONTWAIT, MT_HEADER);
  !                         if (m == (struct mbuf *)0)
  !                           return (ENOBUFS);
  !                         m-&gt;m_off = MMINOFF;
  !                         m-&gt;m_len = sizeof(struct ifnet *);
  !                         m-&gt;m_next = m0;
  !                         m0 = m;
  !                 }
  !                 *(mtod(m0, struct ifnet **)) = ifp;
  !                 s = splimp();
  !                 ifp-&gt;if_opackets++;
  !                 ifq = &ipintrq;
  !                 if (IF_QFULL(ifq)) {
  !                         IF_DROP(ifq);
  !                         m_freem(m0);
  !                         splx(s);
  !                         return (ENOBUFS);
  !                 }
  !                 IF_ENQUEUE(ifq, m0);
  !                 schednetisr(NETISR_IP);
  !                 ifp-&gt;if_ipackets++;
  !                 splx(s);
  !                 return (0);
  !         }
    
  !         return EHOSTUNREACH;
    }
    
    /*
  ***************
  *** 317,341 ****
     */
    /* ARGSUSED */
    vififioctl(ifp, cmd, data)
  !     register struct ifnet *ifp;
  !     int cmd;
  !     caddr_t data;
  ! {
  !     int error = 0;
  ! 
  !     switch (cmd) {
  ! 
  !     case SIOCSIFADDR:
  !             ifp-&gt;if_flags |= IFF_UP;
  !             /*
  !              * Everything else is done at a higher level.
  !              */
  !             break;
  ! 
  !     default:
  !             error = EINVAL;
  !     }
  !     return (error);
    }
    
    vifioctl(dev, cmd, arg, mode)
  --- 317,341 ----
     */
    /* ARGSUSED */
    vififioctl(ifp, cmd, data)
  !         register struct ifnet *ifp;
  !         int cmd;
  !         caddr_t data;
  ! {
  !         int error = 0;
  ! 
  !         switch (cmd) {
  ! 
  !         case SIOCSIFADDR:
  !                 ifp-&gt;if_flags |= IFF_UP;
  !                 /*
  !                  * Everything else is done at a higher level.
  !                  */
  !                 break;
  ! 
  !         default:
  !                 error = EINVAL;
  !         }
  !         return (error);
    }
    
    vifioctl(dev, cmd, arg, mode)
  ***************
  *** 344,356 ****
    caddr_t arg;
    int mode;
    {
  !     int unit;
  !     
  !     unit = minor(dev);
  !     if ((unit &lt; 0) || (unit &gt;= NVIF))
  !       return ENXIO;
  !     
  !     return EINVAL;
    }
    
---------------------------------------------------------------------------- 
    
  --- 344,356 ----
    caddr_t arg;
    int mode;
    {
  !         int unit;
  !         
  !         unit = minor(dev);
  !         if ((unit &lt; 0) || (unit &gt;= NVIF))
  !           return ENXIO;
  !         
  !         return EINVAL;
    }
    
---------------------------------------------------------------------------- 
    
  
  
  
  1.9       +40 -40    apache/htdocs/manual/mod/mod_auth_anon.html
  
  Index: mod_auth_anon.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_auth_anon.html,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -C3 -r1.8 -r1.9
  *** mod_auth_anon.html        1997/06/04 16:14:15     1.8
  --- mod_auth_anon.html        1997/06/24 18:39:37     1.9
  ***************
  *** 61,83 ****
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !     A list of one or more 'magic' userIDs which are allowed access
  !     without password verification. The userIDs are space separated.
  !     It is possible to use the ' and " quotes to allow a space in
  !     a userID as well as the \ escape character.
  !     <p>
  !     Please note that the comparison is <b>case-IN-sensitive</b>.
  !     <br>
  !     I strongly suggest that the magic username '<code>anonymous</code>'
  !     is always one of the allowed userIDs.
  !     <p>
  !     Example:<br>
  !     <code>
  !     Anonymous: anonymous "Not Registered" 'I don\'t know'
  !     </code><p>
  !     This would allow the user to enter without password verification
  !     by using the userId's 'anonymous', 'AnonyMous','Not Registered' and
  !     'I Don't Know'.
    <HR>
    
    <A name="Authoritative"><h2>Anonymous_Authoritative</h2></A>
  --- 61,83 ----
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !         A list of one or more 'magic' userIDs which are allowed access
  !         without password verification. The userIDs are space separated.
  !         It is possible to use the ' and " quotes to allow a space in
  !         a userID as well as the \ escape character.
  !         <p>
  !         Please note that the comparison is <b>case-IN-sensitive</b>.
  !         <br>
  !         I strongly suggest that the magic username '<code>anonymous</code>'
  !         is always one of the allowed userIDs.
  !         <p>
  !         Example:<br>
  !         <code>
  !         Anonymous: anonymous "Not Registered" 'I don\'t know'
  !         </code><p>
  !         This would allow the user to enter without password verification
  !         by using the userId's 'anonymous', 'AnonyMous','Not Registered' and
  !         'I Don't Know'.
    <HR>
    
    <A name="Authoritative"><h2>Anonymous_Authoritative</h2></A>
  ***************
  *** 91,102 ****
            When set 'on', there is no
            fall-through to other authorization methods. So if a
            userID does not match the values specified in the
  !     <code>Anonymous</code> directive, access is denied.
  !     <p>
  !     Be sure you know what you are doing when you decide to switch 
  !     it on. And remember that it is the linking order of the modules
  !     (in the Configuration / Make file) which details the order
  !     in which the Authorization modules are queried.
    <hr>
    
    <A name="LogEmail"><h2>Anonymous_LogEmail</h2></A>
  --- 91,102 ----
            When set 'on', there is no
            fall-through to other authorization methods. So if a
            userID does not match the values specified in the
  !         <code>Anonymous</code> directive, access is denied.
  !         <p>
  !         Be sure you know what you are doing when you decide to switch 
  !         it on. And remember that it is the linking order of the modules
  !         (in the Configuration / Make file) which details the order
  !         in which the Authorization modules are queried.
    <hr>
    
    <A name="LogEmail"><h2>Anonymous_LogEmail</h2></A>
  ***************
  *** 107,114 ****
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !     When set 'on', the default, the 'password' entered (which hopefully
  !     contains a sensible email address) is logged in the httpd-log file.
    <hr>
    
    <A name="MustGiveEmail"><h2>Anonymous_MustGiveEmail</h2></a>
  --- 107,114 ----
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !         When set 'on', the default, the 'password' entered (which hopefully
  !         contains a sensible email address) is logged in the httpd-log file.
    <hr>
    
    <A name="MustGiveEmail"><h2>Anonymous_MustGiveEmail</h2></a>
  ***************
  *** 120,127 ****
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !     Specifies whether the user must specify an email
  !     address as the password.  This prohibits blank passwords.
    <HR>
    
    <A name="NoUserID"><h2>Anonymous_NoUserID</h2></A>
  --- 120,127 ----
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !         Specifies whether the user must specify an email
  !         address as the password.  This prohibits blank passwords.
    <HR>
    
    <A name="NoUserID"><h2>Anonymous_NoUserID</h2></A>
  ***************
  *** 132,142 ****
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !     When set 'on', users can leave
  !     the userID (and perhaps the password field) empty. This
  !     can be very convenient for MS-Explorer users who can
  !     just hit return or click directly on the OK button; which
  !     seems a natural reaction.
    
    <hr>
    
  --- 132,142 ----
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !         When set 'on', users can leave
  !         the userID (and perhaps the password field) empty. This
  !         can be very convenient for MS-Explorer users who can
  !         just hit return or click directly on the OK button; which
  !         seems a natural reaction.
    
    <hr>
    
  ***************
  *** 148,156 ****
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !     When set 'on' the 'password' entered is
  !     checked for at least one '@' and a '.' to encourage users to enter
  !     valid email addresses (see the above <code>Auth_LogEmail</code>).
    
    <hr><a name="Example"><h2>Example</h2></a>
    
  --- 148,156 ----
    <strong>Status:</strong> Extension<br>
    <strong>Module:</strong> mod_auth_anon<p>
    
  !         When set 'on' the 'password' entered is
  !         checked for at least one '@' and a '.' to encourage users to enter
  !         valid email addresses (see the above <code>Auth_LogEmail</code>).
    
    <hr><a name="Example"><h2>Example</h2></a>
    
  ***************
  *** 180,189 ****
    <dl>
    <dt><code>
    Anonymous        anonymous guest www test welcome<p>
  ! Anonymous_MustGiveEmail     on<br>
    Anonymous_VerifyEmail    on<br>
  ! Anonymous_NoUserId          off<br>
  ! Anonymous_LogEmail          on<br>
    <p>
    AuthName                Use 'anonymous' & Email address for guest entry<br>
    AuthType                basic<p>
  --- 180,189 ----
    <dl>
    <dt><code>
    Anonymous        anonymous guest www test welcome<p>
  ! Anonymous_MustGiveEmail on<br>
    Anonymous_VerifyEmail    on<br>
  ! Anonymous_NoUserId      off<br>
  ! Anonymous_LogEmail      on<br>
    <p>
    AuthName                Use 'anonymous' & Email address for guest entry<br>
    AuthType                basic<p>
  ***************
  *** 217,224 ****
        </dd>
    <dt>Version 0.5<br></dt>
        <dd>Added 'VerifyEmail' and 'LogEmail' options. Multiple
  !     'anonymous' tokens allowed. more docs. Added Authoritative
  !     functionality.
        </dd>
    </dl>
    
  --- 217,224 ----
        </dd>
    <dt>Version 0.5<br></dt>
        <dd>Added 'VerifyEmail' and 'LogEmail' options. Multiple
  !         'anonymous' tokens allowed. more docs. Added Authoritative
  !         functionality.
        </dd>
    </dl>
    
  
  
  
  1.14      +6 -6      apache/htdocs/manual/mod/mod_include.html
  
  Index: mod_include.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_include.html,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -C3 -r1.13 -r1.14
  *** mod_include.html  1997/06/04 16:14:21     1.13
  --- mod_include.html  1997/06/24 18:39:38     1.14
  ***************
  *** 309,323 ****
        Unix egrep command.
    
    <DT>( <I>test_condition</I> )
  !     <DD>true if <I>test_condition</I> is true 
    <DT>! <I>test_condition</I>
  !     <DD>true if <I>test_condition</I> is false
    <DT><I>test_condition1</I> && <I>test_condition2</I>
  !     <DD>true if both <I>test_condition1</I> and
  !     <I>test_condition2</I> are true 
    <DT><I>test_condition1</I> || <I>test_condition2</I>
  !     <DD>true if either <I>test_condition1</I> or
  !     <I>test_condition2</I> is true 
    </DL>
    
    <P> "<I>=</I>" and "<I>!=</I>" bind more tightly than "<I>&&</I>" and
  --- 309,323 ----
        Unix egrep command.
    
    <DT>( <I>test_condition</I> )
  !         <DD>true if <I>test_condition</I> is true 
    <DT>! <I>test_condition</I>
  !         <DD>true if <I>test_condition</I> is false
    <DT><I>test_condition1</I> && <I>test_condition2</I>
  !         <DD>true if both <I>test_condition1</I> and
  !         <I>test_condition2</I> are true 
    <DT><I>test_condition1</I> || <I>test_condition2</I>
  !         <DD>true if either <I>test_condition1</I> or
  !         <I>test_condition2</I> is true 
    </DL>
    
    <P> "<I>=</I>" and "<I>!=</I>" bind more tightly than "<I>&&</I>" and
  
  
  
  1.23      +2 -2      apache/htdocs/manual/mod/mod_proxy.html
  
  Index: mod_proxy.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_proxy.html,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -C3 -r1.22 -r1.23
  *** mod_proxy.html    1997/06/04 16:14:23     1.22
  --- mod_proxy.html    1997/06/24 18:39:38     1.23
  ***************
  *** 297,303 ****
    <li><a href="#shortname">Using Netscape hostname shortcuts</a>
    <li><a href="#mimetypes">Why doesn't file type <i>xxx</i> download via 
FTP?</a>
    <li><a href="#startup">Why does Apache start more slowly when using the
  !     proxy module?</a>
    <li><a href="#socks">Can I use the Apache proxy module with my SOCKS 
proxy?</a>
    </ul>
    
  --- 297,303 ----
    <li><a href="#shortname">Using Netscape hostname shortcuts</a>
    <li><a href="#mimetypes">Why doesn't file type <i>xxx</i> download via 
FTP?</a>
    <li><a href="#startup">Why does Apache start more slowly when using the
  !         proxy module?</a>
    <li><a href="#socks">Can I use the Apache proxy module with my SOCKS 
proxy?</a>
    </ul>
    
  ***************
  *** 337,343 ****
    </pre>
    
    <h2><a name="startup">Why does Apache start more slowly when using the
  !     proxy module?</a></h2>
    
    If you're using the <code>ProxyBlock</code> or <code>NoCache</code>
    directives, hostnames' IP addresses are looked up and cached during
  --- 337,343 ----
    </pre>
    
    <h2><a name="startup">Why does Apache start more slowly when using the
  !         proxy module?</a></h2>
    
    If you're using the <code>ProxyBlock</code> or <code>NoCache</code>
    directives, hostnames' IP addresses are looked up and cached during
  
  
  
  1.10      +4 -4      apache/htdocs/manual/mod/mod_rewrite.html
  
  Index: mod_rewrite.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_rewrite.html,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -C3 -r1.9 -r1.10
  *** mod_rewrite.html  1997/06/04 16:14:23     1.9
  --- mod_rewrite.html  1997/06/24 18:39:39     1.10
  ***************
  *** 988,997 ****
        which will be expanded. You can use this flag more than once to set more
        than one variable. The variables can be later dereferenced at a lot of
        situations, but the usual location will be from within XSSI (via
  !     <tt>&lt;!--#echo var="VAR"--&gt;</tt>) or CGI (e.g. 
<tt>$ENV{'VAR'}</tt>).
  !     But additionally you can also dereference it in a following RewriteCond
  !     pattern via <tt>%{ENV:VAR}</tt>. Use this to strip but remember
  !     information from URLs. 
    </ul>
    
    <p>
  --- 988,997 ----
        which will be expanded. You can use this flag more than once to set more
        than one variable. The variables can be later dereferenced at a lot of
        situations, but the usual location will be from within XSSI (via
  !         <tt>&lt;!--#echo var="VAR"--&gt;</tt>) or CGI (e.g. 
<tt>$ENV{'VAR'}</tt>).
  !         But additionally you can also dereference it in a following 
RewriteCond
  !         pattern via <tt>%{ENV:VAR}</tt>. Use this to strip but remember
  !         information from URLs. 
    </ul>
    
    <p>
  
  
  
  1.7       +1 -1      apache/htdocs/manual/mod/mod_status.html
  
  Index: mod_status.html
  ===================================================================
  RCS file: /export/home/cvs/apache/htdocs/manual/mod/mod_status.html,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -C3 -r1.6 -r1.7
  *** mod_status.html   1997/06/04 16:14:24     1.6
  --- mod_status.html   1997/06/24 18:39:39     1.7
  ***************
  *** 90,96 ****
    Do this by adding the following to the AUX_CFLAGS line in the
    "Configuration" file and then recompiling as usual.
    <pre>
  !     AUX_CFLAGS= (something) -DSTATUS
    </pre>
    
    <BLOCKQUOTE>
  --- 90,96 ----
    Do this by adding the following to the AUX_CFLAGS line in the
    "Configuration" file and then recompiling as usual.
    <pre>
  !         AUX_CFLAGS= (something) -DSTATUS
    </pre>
    
    <BLOCKQUOTE>
  
  
  

Reply via email to