You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by wr...@locus.apache.org on 2000/06/02 01:42:34 UTC

cvs commit: apache-1.3/src/support htpasswd.c htdigest.mcp.gz htpasswd.mcp.gz

wrowe       00/06/01 16:42:33

  Modified:    conf     httpd.conf-dist.nw
               htdocs/manual netware.html
               src      ApacheNW.mcp.gz
               src/include alloc.h ap_config.h http_config.h
               src/main alloc.c http_config.c http_main.c
               src/modules/proxy mod_proxy.c proxy_cache.c proxy_util.c
               src/modules/standard mod_auth_anon.c mod_cern_meta.c
                        mod_digest.c mod_expires.c mod_headers.c
                        mod_include.c mod_info.c mod_log_config.c
                        mod_rewrite.c mod_speling.c mod_status.c
                        mod_usertrack.c
               src/os/netware ApacheCore.imp multithread.c os.c os.h
               src/support htpasswd.c
  Added:       src/lib/expat-lite xmlparse.imp xmlparsenw.def xmltok.imp
                        xmltoknw.def
               src/os/netware ApacheModuleTLS.def apache.xdc libpre.c
                        libprews.c mod_tls.c
  Removed:     src/support htdigest.mcp.gz htpasswd.mcp.gz
  Log:
    Netware port updates to 1.3.13-dev
  
    Submitted by Mike Gardiner [<MG...@novell.com>]
  
  Revision  Changes    Path
  1.2       +328 -227  apache-1.3/conf/httpd.conf-dist.nw
  
  Index: httpd.conf-dist.nw
  ===================================================================
  RCS file: /home/cvs/apache-1.3/conf/httpd.conf-dist.nw,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- httpd.conf-dist.nw	2000/01/18 19:32:36	1.1
  +++ httpd.conf-dist.nw	2000/06/01 23:42:21	1.2
  @@ -172,17 +172,18 @@
   # Note: The order is which modules are loaded is important.  Don't change
   # the order below without expert advice.
   
  -# LoadModule anon_auth_module modules/authanon
  -# LoadModule cern_meta_module modules/cernmeta
  -# LoadModule digest_module modules/digest
  -# LoadModule expires_module modules/expires
  -# LoadModule headers_module modules/headers
  -# LoadModule proxy_module modules/proxy
  -# LoadModule rewrite_module modules/rewrite
  -# LoadModule speling_module modules/speling
  -# LoadModule status_module modules/status
  -# LoadModule info_module modules/info
  -# LoadModule usertrack_module modules/usrtrack
  +# LoadModule anon_auth_module modules/authanon.nlm
  +# LoadModule cern_meta_module modules/cernmeta.nlm
  +# LoadModule digest_module modules/digest.nlm
  +# LoadModule expires_module modules/expires.nlm
  +# LoadModule headers_module modules/headers.nlm
  +# LoadModule proxy_module modules/proxy.nlm
  +# LoadModule rewrite_module modules/rewrite.nlm
  +# LoadModule speling_module modules/speling.nlm
  +# LoadModule status_module modules/status.nlm
  +# LoadModule info_module modules/info.nlm
  +# LoadModule usertrack_module modules/usrtrack.nlm
  +# LoadModule tls_module modules/mod_tls.nlm
   
   #
   # ExtendedStatus controls whether Apache will generate "full" status
  @@ -268,7 +269,7 @@
   # Note that "MultiViews" must be named *explicitly* --- "Options All"
   # doesn't give it to you.
   #
  -    Options Indexes FollowSymLinks
  +    Options Indexes FollowSymLinks MultiViews
   
   #
   # This controls which options the .htaccess files in directories can
  @@ -288,7 +289,10 @@
   # UserDir: The name of the directory which is appended onto a user's home
   # directory if a ~user request is received.
   #
  -UserDir public_html
  +<IfModule mod_userdir.c>
  +    UserDir public_html
  +</IfModule>
  +
   #
   # Control access to UserDir directories.  The following is an example
   # for a site where these directories are restricted to read-only.
  @@ -300,23 +304,25 @@
   #        Order allow,deny
   #        Allow from all
   #    </Limit>
  -#    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
  +#    <LimitExcept GET POST OPTIONS PROPFIND>
   #        Order deny,allow
   #        Deny from all
  -#    </Limit>
  +#    </LimitExcept>
   #</Directory>
   
   #
   # DirectoryIndex: Name of the file or files to use as a pre-written HTML
   # directory index.  Separate multiple entries with spaces.
   #
  -DirectoryIndex index.html
  +<IfModule mod_dir.c>
  +    DirectoryIndex index.html
  +</IfModule>
   
   #
   # AccessFileName: The name of the file to look for in each directory
   # for access control information.
   #
  -#AccessFileName .htaccess
  +AccessFileName .htaccess
   
   #
   # The following lines prevent .htaccess files from being viewed by
  @@ -356,7 +362,9 @@
   # TypesConfig describes where the mime.types file (or equivalent) is
   # to be found.
   #
  -TypesConfig conf/mime.types
  +<IfModule mod_mime.c>
  +    TypesConfig conf/mime.types
  +</IfModule>
   
   #
   # DefaultType is the default MIME type the server will use for a document
  @@ -426,7 +434,7 @@
   # define per-<VirtualHost> access logfiles, transactions will be
   # logged therein and *not* in this file.
   #
  -#CustomLog logs/access_log common
  +CustomLog logs/access_log common
   
   #
   # If you would like to have agent and referer logfiles, uncomment the
  @@ -453,40 +461,46 @@
   #
   # Aliases: Add here as many aliases as you need (with no limit). The format is 
   # Alias fakename realname
  -#
  -# Note that if you include a trailing / on fakename then the server will
  -# require it to be present in the URL.  So "/icons" isn't aliased in this
  -# example, only "/icons/"..
   #
  -Alias /icons/ "sys:/apache/icons/"
  +<IfModule mod_alias.c>
   
  -<Directory "sys:/apache/icons">
  -    Options Indexes MultiViews
  -    AllowOverride None
  -    Order allow,deny
  -    Allow from all
  -</Directory>
  +    #
  +    # Note that if you include a trailing / on fakename then the server will
  +    # require it to be present in the URL.  So "/icons" isn't aliased in this
  +    # example, only "/icons/"..
  +    #
  +    Alias /icons/ "sys:/apache/icons/"
  +
  +    <Directory "sys:/apache/icons">
  +        Options Indexes MultiViews
  +        AllowOverride None
  +        Order allow,deny
  +        Allow from all
  +    </Directory>
  +
  +    #
  +    # ScriptAlias: This controls which directories contain server scripts.
  +    # ScriptAliases are essentially the same as Aliases, except that
  +    # documents in the realname directory are treated as applications and
  +    # run by the server when requested rather than as documents sent to the client.
  +    # The same rules about trailing "/" apply to ScriptAlias directives as to
  +    # Alias.
  +    #
  +    ScriptAlias /cgi-bin/ "sys:/apache/cgi-bin/"
  +
  +    #
  +    # "sys:/apache/cgi-bin" should be changed to whatever your ScriptAliased
  +    # CGI directory exists, if you have that configured.
  +    #
  +    <Directory "sys:/apache/cgi-bin">
  +        AllowOverride None
  +        Options None
  +        Order allow,deny
  +        Allow from all
  +    </Directory>
   
  -#
  -# ScriptAlias: This controls which directories contain server scripts.
  -# ScriptAliases are essentially the same as Aliases, except that
  -# documents in the realname directory are treated as applications and
  -# run by the server when requested rather than as documents sent to the client.
  -# The same rules about trailing "/" apply to ScriptAlias directives as to
  -# Alias.
  -#
  -ScriptAlias /cgi-bin/ "sys:/apache/cgi-bin/"
  -
  -#
  -# "sys:/apache/cgi-bin" should be changed to whatever your ScriptAliased
  -# CGI directory exists, if you have that configured.
  -#
  -<Directory "sys:/apache/cgi-bin">
  -    AllowOverride None
  -    Options None
  -    Order allow,deny
  -    Allow from all
  -</Directory>
  +</IfModule>
  +# End of aliases.
   
   #
   # Redirect allows you to tell clients about documents which used to exist in
  @@ -497,159 +511,224 @@
   
   #
   # Directives controlling the display of server-generated directory listings.
  -#
  -
  -#
  -# FancyIndexing is whether you want fancy directory indexing or standard
   #
  -IndexOptions FancyIndexing
  +<IfModule mod_autoindex.c>
   
  -#
  -# AddIcon* directives tell the server which icon to show for different
  -# files or filename extensions.  These are only displayed for
  -# FancyIndexed directories.
  -#
  -AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
  -
  -AddIconByType (TXT,/icons/text.gif) text/*
  -AddIconByType (IMG,/icons/image2.gif) image/*
  -AddIconByType (SND,/icons/sound2.gif) audio/*
  -AddIconByType (VID,/icons/movie.gif) video/*
  -
  -AddIcon /icons/binary.gif .bin .exe
  -AddIcon /icons/binhex.gif .hqx
  -AddIcon /icons/tar.gif .tar
  -AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
  -AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
  -AddIcon /icons/a.gif .ps .ai .eps
  -AddIcon /icons/layout.gif .html .shtml .htm .pdf
  -AddIcon /icons/text.gif .txt
  -AddIcon /icons/c.gif .c
  -AddIcon /icons/p.gif .pl .py
  -AddIcon /icons/f.gif .for
  -AddIcon /icons/dvi.gif .dvi
  -AddIcon /icons/uuencoded.gif .uu
  -AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
  -AddIcon /icons/tex.gif .tex
  -AddIcon /icons/bomb.gif core
  -
  -AddIcon /icons/back.gif ..
  -AddIcon /icons/hand.right.gif README
  -AddIcon /icons/folder.gif ^^DIRECTORY^^
  -AddIcon /icons/blank.gif ^^BLANKICON^^
  -
  -#
  -# DefaultIcon is which icon to show for files which do not have an icon
  -# explicitly set.
  -#
  -DefaultIcon /icons/unknown.gif
  -
  -#
  -# AddDescription allows you to place a short description after a file in
  -# server-generated indexes.  These are only displayed for FancyIndexed
  -# directories.
  -# Format: AddDescription "description" filename
  -#
  -#AddDescription "GZIP compressed document" .gz
  -#AddDescription "tar archive" .tar
  -#AddDescription "GZIP compressed tar archive" .tgz
  -
  -#
  -# ReadmeName is the name of the README file the server will look for by
  -# default, and append to directory listings.
  -#
  -# HeaderName is the name of a file which should be prepended to
  -# directory indexes. 
  -#
  -# The server will first look for name.html and include it if found.
  -# If name.html doesn't exist, the server will then look for name.txt
  -# and include it as plaintext if found.
  -#
  -ReadmeName README
  -HeaderName HEADER
  -
  -#
  -# IndexIgnore is a set of filenames which directory indexing should ignore
  -# and not include in the listing.  Shell-style wildcarding is permitted.
  -#
  -IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
  -
  -#
  -# AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
  -# information on the fly. Note: Not all browsers support this.
  -# Despite the name similarity, the following Add* directives have nothing
  -# to do with the FancyIndexing customization directives above.
  -#
  -AddEncoding x-compress Z
  -AddEncoding x-gzip gz tgz
  +    #
  +    # FancyIndexing is whether you want fancy directory indexing or standard
  +    #
  +    IndexOptions FancyIndexing
  +
  +    #
  +    # AddIcon* directives tell the server which icon to show for different
  +    # files or filename extensions.  These are only displayed for
  +    # FancyIndexed directories.
  +    #
  +    AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
  +
  +    AddIconByType (TXT,/icons/text.gif) text/*
  +    AddIconByType (IMG,/icons/image2.gif) image/*
  +    AddIconByType (SND,/icons/sound2.gif) audio/*
  +    AddIconByType (VID,/icons/movie.gif) video/*
  +
  +    AddIcon /icons/binary.gif .bin .exe
  +    AddIcon /icons/binhex.gif .hqx
  +    AddIcon /icons/tar.gif .tar
  +    AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
  +    AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
  +    AddIcon /icons/a.gif .ps .ai .eps
  +    AddIcon /icons/layout.gif .html .shtml .htm .pdf
  +    AddIcon /icons/text.gif .txt
  +    AddIcon /icons/c.gif .c
  +    AddIcon /icons/p.gif .pl .py
  +    AddIcon /icons/f.gif .for
  +    AddIcon /icons/dvi.gif .dvi
  +    AddIcon /icons/uuencoded.gif .uu
  +    AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
  +    AddIcon /icons/tex.gif .tex
  +    AddIcon /icons/bomb.gif core
  +
  +    AddIcon /icons/back.gif ..
  +    AddIcon /icons/hand.right.gif README
  +    AddIcon /icons/folder.gif ^^DIRECTORY^^
  +    AddIcon /icons/blank.gif ^^BLANKICON^^
  +
  +    #
  +    # DefaultIcon is which icon to show for files which do not have an icon
  +    # explicitly set.
  +    #
  +    DefaultIcon /icons/unknown.gif
  +
  +    #
  +    # AddDescription allows you to place a short description after a file in
  +    # server-generated indexes.  These are only displayed for FancyIndexed
  +    # directories.
  +    # Format: AddDescription "description" filename
  +    #
  +    #AddDescription "GZIP compressed document" .gz
  +    #AddDescription "tar archive" .tar
  +    #AddDescription "GZIP compressed tar archive" .tgz
  +
  +    #
  +    # ReadmeName is the name of the README file the server will look for by
  +    # default, and append to directory listings.
  +    #
  +    # HeaderName is the name of a file which should be prepended to
  +    # directory indexes. 
  +    #
  +    # The server will first look for name.html and include it if found.
  +    # If name.html doesn't exist, the server will then look for name.txt
  +    # and include it as plaintext if found.
  +    #
  +    ReadmeName README
  +    HeaderName HEADER
  +
  +    #
  +    # IndexIgnore is a set of filenames which directory indexing should ignore
  +    # and not include in the listing.  Shell-style wildcarding is permitted.
  +    #
  +    IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t
   
  -#
  -# AddLanguage allows you to specify the language of a document. You can
  -# then use content negotiation to give a browser a file in a language
  -# it can understand.  Note that the suffix does not have to be the same
  -# as the language keyword --- those with documents in Polish (whose
  -# net-standard language code is pl) may wish to use "AddLanguage pl .po" 
  -# to avoid the ambiguity with the common suffix for perl scripts.
  -#
  -AddLanguage en .en
  -AddLanguage fr .fr
  -AddLanguage de .de
  -AddLanguage da .da
  -AddLanguage el .el
  -AddLanguage it .it
  -
  -#
  -# LanguagePriority allows you to give precedence to some languages
  -# in case of a tie during content negotiation.
  -# Just list the languages in decreasing order of preference.
  -#
  -LanguagePriority en fr de
  -
  -#
  -# AddType allows you to tweak mime.types without actually editing it, or to
  -# make certain files to be certain types.
  -#
  -# For example, the PHP3 module (not part of the Apache distribution - see
  -# http://www.php.net) will typically use:
  -#
  -#AddType application/x-httpd-php3 .php3
  -#AddType application/x-httpd-php3-source .phps
  -
  -AddType application/x-tar .tgz
  -
  -#
  -# AddHandler allows you to map certain file extensions to "handlers",
  -# actions unrelated to filetype. These can be either built into the server
  -# or added with the Action command (see below)
  -#
  -# If you want to use server side includes, or CGI outside
  -# ScriptAliased directories, uncomment the following lines.
  -#
  -# To use CGI scripts:
  -#
  -#AddHandler cgi-script .cgi
  -
  -#
  -# To use server-parsed HTML files
  -#
  -#AddType text/html .shtml
  -#AddHandler server-parsed .shtml
  +</IfModule>
  +# End of indexing directives.
   
   #
  -# Uncomment the following line to enable Apache's send-asis HTTP file
  -# feature
  +# Document types.
   #
  -#AddHandler send-as-is asis
  +<IfModule mod_mime.c>
   
  -#
  -# If you wish to use server-parsed imagemap files, use
  -#
  -#AddHandler imap-file map
  +    #
  +    # AddEncoding allows you to have certain browsers (Mosaic/X 2.1+) uncompress
  +    # information on the fly. Note: Not all browsers support this.
  +    # Despite the name similarity, the following Add* directives have nothing
  +    # to do with the FancyIndexing customization directives above.
  +    #
  +    AddEncoding x-compress Z
  +    AddEncoding x-gzip gz tgz
  +
  +    #
  +    # AddLanguage allows you to specify the language of a document. You can
  +    # then use content negotiation to give a browser a file in a language
  +    # it can understand.  
  +    #
  +    # Note 1: The suffix does not have to be the same as the language 
  +    # keyword --- those with documents in Polish (whose net-standard 
  +    # language code is pl) may wish to use "AddLanguage pl .po" to 
  +    # avoid the ambiguity with the common suffix for perl scripts.
  +    #
  +    # Note 2: The example entries below illustrate that in quite
  +    # some cases the two character 'Language' abbriviation is not
  +    # identical to the two character 'Country' code for its country,
  +    # E.g. 'Danmark/dk' versus 'Danish/da'.
  +    #
  +    # Note 3: In the case of 'ltz' we violate the RFC by using a three char 
  +    # specifier. But there is 'work in progress' to fix this and get 
  +    # the reference data for rfc1766 cleaned up.
  +    #
  +    # Danish (da) - Dutch (nl) - English (en) - Estonian (ee)
  +    # French (fr) - German (de) - Greek-Modern (el)
  +    # Italian (it) - Korean (kr) - Norwegian (no)
  +    # Portugese (pt) - Luxembourgeois* (ltz)
  +    # Spanish (es) - Swedish (sv) - Catalan (ca) - Czech(cz)
  +    # Polish (pl) - Brazilian Portuguese (pt-br) - Japanese (ja)
  +    # Russian (ru)
  +    #
  +    AddLanguage da .dk
  +    AddLanguage nl .nl
  +    AddLanguage en .en
  +    AddLanguage et .ee
  +    AddLanguage fr .fr
  +    AddLanguage de .de
  +    AddLanguage el .el
  +    AddLanguage he .he
  +    AddCharset ISO-8859-8 .iso8859-8
  +    AddLanguage it .it
  +    AddLanguage ja .ja
  +    AddCharset ISO-2022-JP .jis
  +    AddLanguage kr .kr
  +    AddCharset ISO-2022-KR .iso-kr
  +    AddLanguage no .no
  +    AddLanguage pl .po
  +    AddCharset ISO-8859-2 .iso-pl
  +    AddLanguage pt .pt
  +    AddLanguage pt-br .pt-br
  +    AddLanguage ltz .lu
  +    AddLanguage ca .ca
  +    AddLanguage es .es
  +    AddLanguage sv .se
  +    AddLanguage cz .cz
  +    AddLanguage ru .ru
  +    AddCharset WINDOWS-1251 .cp-1251
  +    AddCharset CP866        .cp866
  +    AddCharset ISO-8859-5   .iso-ru
  +    AddCharset KOI8-R       .koi8-r
  +    AddCharset UCS-2        .ucs2
  +    AddCharset UCS-4        .ucs4
  +    AddCharset UTF-8        .utf8
  +
  +    # LanguagePriority allows you to give precedence to some languages
  +    # in case of a tie during content negotiation.
  +    #
  +    # Just list the languages in decreasing order of preference. We have
  +    # more or less alphabetized them here. You probably want to change this.
  +    #
  +    <IfModule mod_negotiation.c>
  +        LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ru ltz ca es sv
  +    </IfModule>
  +
  +    #
  +    # AddType allows you to tweak mime.types without actually editing it, or to
  +    # make certain files to be certain types.
  +    #
  +    # For example, the PHP 3.x module (not part of the Apache distribution - see
  +    # http://www.php.net) will typically use:
  +    #
  +    #AddType application/x-httpd-php3 .php3
  +    #AddType application/x-httpd-php3-source .phps
  +    #
  +    # And for PHP 4.x, use:
  +    #
  +    #AddType application/x-httpd-php .php
  +    #AddType application/x-httpd-php-source .phps
  +
  +    AddType application/x-tar .tgz
  +
  +    #
  +    # AddHandler allows you to map certain file extensions to "handlers",
  +    # actions unrelated to filetype. These can be either built into the server
  +    # or added with the Action command (see below)
  +    #
  +    # If you want to use server side includes, or CGI outside
  +    # ScriptAliased directories, uncomment the following lines.
  +    #
  +    # To use CGI scripts:
  +    #
  +    #AddHandler cgi-script .cgi
  +
  +    #
  +    # To use server-parsed HTML files
  +    #
  +    #AddType text/html .shtml
  +    #AddHandler server-parsed .shtml
  +
  +    #
  +    # Uncomment the following line to enable Apache's send-asis HTTP file
  +    # feature
  +    #
  +    #AddHandler send-as-is asis
  +
  +    #
  +    # If you wish to use server-parsed imagemap files, use
  +    #
  +    #AddHandler imap-file map
  +
  +    #
  +    # To enable type maps, you might want to use
  +    #
  +    #AddHandler type-map var
   
  -#
  -# To enable type maps, you might want to use
  -#
  -#AddHandler type-map var
  +</IfModule>
  +# End of document types.
   
   #
   # Action lets you define media types that will execute a script whenever
  @@ -691,48 +770,59 @@
   #  N.B.: Many of the environment variables associated with the original
   #  request will *not* be available to such a script.
   
  +#
  +# Customize behaviour based on the browser
   #
  -# The following directives modify normal HTTP response behavior.
  -# The first directive disables keepalive for Netscape 2.x and browsers that
  -# spoof it. There are known problems with these browser implementations.
  -# The second directive is for Microsoft Internet Explorer 4.0b2
  -# which has a broken HTTP/1.1 implementation and does not properly
  -# support keepalive when it is used on 301 or 302 (redirect) responses.
  -#
  -BrowserMatch "Mozilla/2" nokeepalive
  -BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
  -
  -#
  -# The following directive disables HTTP/1.1 responses to browsers which
  -# are in violation of the HTTP/1.0 spec by not being able to grok a
  -# basic 1.1 response.
  -#
  -BrowserMatch "RealPlayer 4\.0" force-response-1.0
  -BrowserMatch "Java/1\.0" force-response-1.0
  -BrowserMatch "JDK/1\.0" force-response-1.0
  +<IfModule mod_setenvif.c>
  +
  +    #
  +    # The following directives modify normal HTTP response behavior.
  +    # The first directive disables keepalive for Netscape 2.x and browsers that
  +    # spoof it. There are known problems with these browser implementations.
  +    # The second directive is for Microsoft Internet Explorer 4.0b2
  +    # which has a broken HTTP/1.1 implementation and does not properly
  +    # support keepalive when it is used on 301 or 302 (redirect) responses.
  +    #
  +    BrowserMatch "Mozilla/2" nokeepalive
  +    BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
  +
  +    #
  +    # The following directive disables HTTP/1.1 responses to browsers which
  +    # are in violation of the HTTP/1.0 spec by not being able to grok a
  +    # basic 1.1 response.
  +    #
  +    BrowserMatch "RealPlayer 4\.0" force-response-1.0
  +    BrowserMatch "Java/1\.0" force-response-1.0
  +    BrowserMatch "JDK/1\.0" force-response-1.0
  +
  +</IfModule>
   
   #
   # Allow server status reports, with the URL of http://servername/server-status
   # Change the ".your_domain.com" to match your domain to enable.
   #
  -#<Location /server-status>
  -#    SetHandler server-status
  -#    Order deny,allow
  -#    Deny from all
  -#    Allow from .your_domain.com
  -#</Location>
  +<IfModule mod_info.c>
  +    <Location /server-status>
  +        SetHandler server-status
  +        Order deny,allow
  +        Deny from all
  +        Allow from .your_domain.com
  +    </Location>
  +</IfModule>
   
   #
   # Allow remote server configuration reports, with the URL of
   #  http://servername/server-info (requires that mod_info.c be loaded).
   # Change the ".your_domain.com" to match your domain to enable.
   #
  -#<Location /server-info>
  -#    SetHandler server-info
  -#    Order deny,allow
  -#    Deny from all
  -#    Allow from .your_domain.com
  -#</Location>
  +<IfModule mod_status.c>
  +    <Location /server-info>
  +        SetHandler server-info
  +        Order deny,allow
  +        Deny from all
  +        Allow from .your_domain.com
  +    </Location>
  +</IfModule>
   
   #
   # There have been reports of people trying to abuse an old bug from pre-1.1
  @@ -794,8 +884,8 @@
   # If you want to use name-based virtual hosts you need to define at
   # least one IP address (and port number) for them.
   #
  -#NameVirtualHost 123.45.67.89:8080
  -
  +#NameVirtualHost 12.34.56.78:80
  +#NameVirtualHost 12.34.56.78
   
   #
   # VirtualHost example:
  @@ -811,4 +901,15 @@
   
   #<VirtualHost _default_:*>
   #</VirtualHost>
  +
  +#
  +# SecureListen is the same as the Listen directive only it
  +# ensures the port will be secure.  The second parameter
  +# specifies the certificate to use. "SSL CertificateIP" is
  +# the default.
  +#
  +
  +<IfModule mod_tls.c>
  +    SecureListen 443 "SSL CertificateIP"
  +</IfModule>
   
  
  
  
  1.2       +20 -29    apache-1.3/htdocs/manual/netware.html
  
  Index: netware.html
  ===================================================================
  RCS file: /home/cvs/apache-1.3/htdocs/manual/netware.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- netware.html	2000/01/18 19:32:42	1.1
  +++ netware.html	2000/06/01 23:42:22	1.2
  @@ -12,8 +12,14 @@
    VLINK="#000080"
    ALINK="#FF0000"
   >
  -<!--#include virtual="header.html" -->
  +<DIV ALIGN="CENTER">
  + <IMG SRC="images/sub.gif" ALT="[APACHE DOCUMENTATION]">
  + <H3>
  +  Apache HTTP Server Version 1.3
  + </H3>
  +</DIV>
   
  +
   <H1 ALIGN="CENTER">Using Apache With Novell NetWare 5</H1>
   
   <P>This document explains how to install, configure and run
  @@ -25,14 +31,6 @@
      use our <A HREF="http://www.apache.org/bug_report.html">bug reporting
      page.</A></P>
   
  -<P><STRONG>Warning: Apache on NetWare has not yet been optimized for performance.
  -Apache still performs best, and is most reliable on Unix platforms.  Over
  -time we will improve NetWare performance. Folks doing comparative reviews
  -of webserver performance are asked to compare against Apache
  -on a Unix platform such as Solaris, FreeBSD, or Linux.</STRONG></P>
  -
  -<P>
  -
   Most of this document assumes that you are installing Apache from a
   binary distribution. If you want to compile Apache yourself (possibly
   to help with development, or to track down bugs), see the section on
  @@ -54,14 +52,11 @@
   <H2><A NAME="req">Requirements</A></H2>
   
   Apache 1.3 is designed to run on NetWare 5.0 and 5.1.
  -<P>
  -
  -<STRONG>If running on NetWare 5.0 you must install Service Pack 4.</STRONG>
  -
  -<P>
  +<P><STRONG>If running on NetWare 5.0 you must install Service Pack 5.</STRONG><P>
  +<P><STRONG>If running on NetWare 5.1 you must install Service Pack 1.</STRONG><P>
   <P>
   
  -Service pack 4 is available <A HREF="http://support.novell.com/misc/patlst.htm#nw">here.</A>
  +NetWare service packs are available <A HREF="http://support.novell.com/misc/patlst.htm#nw">here.</A>
   
   <H2><A NAME="down">Downloading Apache for NetWare 5</A></H2>
   
  @@ -87,8 +82,6 @@
     <LI>Copy all the *.conf-dist-nw files to the <CODE>sys:/apache/conf</CODE> directory
         and rename them all as *.conf files
     <LI>Copy the mime.types and magic files to sys:/apache/conf directory
  -  <LI>Copy all files and subdirectories of \apache-1.3\htdocs to sys:/apache/htdocs and
  -      rename the proper index file (index.html.en) to index.html
     <LI>Copy all files and subdirectories in \apache-1.3\icons to sys:/apache/icons
     <LI>Create the directory sys:/apache/logs on the server
     <LI>Create the directory sys:/apache/cgi-bin on the server
  @@ -251,18 +244,10 @@
   </P>
   
   <P>All major pieces of Apache may be built using the ApacheNW.mcp project
  -   file. This includes modules such as status, info, and proxy. In addition,
  -   the following project files have been provided as well:
  -<PRE>   
  -       /apache-1.3/src/support/htpasswd.mcp.gz
  -       /apache-1.3/src/support/htdigest.mcp.gz
  -</PRE>
  -
  +   file. This includes modules such as status, info, and proxy.
  +   
   </P>
  -<CODE>htpasswd.mcp.gz</CODE> and <CODE>htdigest.mcp.gz</CODE> will also need
  -to be unzipped before they can be used with MetroWerks CodeWarrior.
  -
  -<P>Once Apache has been compiled, it needs to be installed in its server
  +<P>Once Apache has been built, it needs to be installed in its server
      root directory. The default is the <CODE>sys:/Apache</CODE>
      directory. </P>
   <P>
  @@ -271,8 +256,14 @@
   and rename *.conf.  Edit the ServerRoot entries to your
   actual server root (for example "sys:/apache").  Copy over
   the conf/magic and conf/mime.types files as well.
  +
  +<HR>
  + <H3 ALIGN="CENTER">
  +  Apache HTTP Server Version 1.3
  + </H3>
  +
  +<A HREF="./"><IMG SRC="images/index.gif" ALT="Index"></A>
   
  -<!--#include virtual="footer.html" -->
   </BODY>
   </HTML>
   
  
  
  
  1.4       +324 -255  apache-1.3/src/ApacheNW.mcp.gz
  
  	<<Binary file>>
  
  
  1.71      +1 -0      apache-1.3/src/include/alloc.h
  
  Index: alloc.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/alloc.h,v
  retrieving revision 1.70
  retrieving revision 1.71
  diff -u -r1.70 -r1.71
  --- alloc.h	1999/07/29 17:53:54	1.70
  +++ alloc.h	2000/06/01 23:42:23	1.71
  @@ -92,6 +92,7 @@
   typedef struct pool ap_pool;
   
   pool * ap_init_alloc(void);		/* Set up everything */
  +void ap_cleanup_alloc(void);
   API_EXPORT(pool *) ap_make_sub_pool(pool *);	/* All pools are subpools of permanent_pool */
   API_EXPORT(void) ap_destroy_pool(pool *);
   
  
  
  
  1.287     +1 -1      apache-1.3/src/include/ap_config.h
  
  Index: ap_config.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/ap_config.h,v
  retrieving revision 1.286
  retrieving revision 1.287
  diff -u -r1.286 -r1.287
  --- ap_config.h	2000/04/01 05:02:06	1.286
  +++ ap_config.h	2000/06/01 23:42:23	1.287
  @@ -1230,7 +1230,7 @@
   #endif
   
   /* Majority of os's want to verify FD_SETSIZE */
  -#if !defined(WIN32) && !defined(TPF)
  +#if !defined(WIN32) && !defined(TPF) && !defined(NETWARE)
   #define CHECK_FD_SETSIZE
   #endif
   
  
  
  
  1.103     +1 -0      apache-1.3/src/include/http_config.h
  
  Index: http_config.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/include/http_config.h,v
  retrieving revision 1.102
  retrieving revision 1.103
  diff -u -r1.102 -r1.103
  --- http_config.h	1999/05/07 00:16:10	1.102
  +++ http_config.h	2000/06/01 23:42:23	1.103
  @@ -356,6 +356,7 @@
   void ap_setup_prelinked_modules(void);
   void ap_show_directives(void);
   void ap_show_modules(void);
  +void ap_cleanup_method_ptrs(void);
   
   /* For http_request.c... */
   
  
  
  
  1.1                  apache-1.3/src/lib/expat-lite/xmlparse.imp
  
  Index: xmlparse.imp
  ===================================================================
  XML_DefaultCurrent
  XML_ErrorString
  XML_ExternalEntityParserCreate
  XML_GetBase
  XML_GetBuffer
  XML_GetCurrentByteCount
  XML_GetCurrentByteIndex
  XML_GetCurrentColumnNumber
  XML_GetCurrentLineNumber
  XML_GetErrorCode
  XML_GetSpecifiedAttributeCount
  XML_Parse
  XML_ParseBuffer
  XML_ParserCreate
  XML_ParserCreateNS
  XML_ParserFree
  XML_SetBase
  XML_SetCdataSectionHandler
  XML_SetCharacterDataHandler
  XML_SetCommentHandler
  XML_SetDefaultHandler
  XML_SetDefaultHandlerExpand
  XML_SetElementHandler
  XML_SetEncoding
  XML_SetExternalEntityRefHandler
  XML_SetExternalEntityRefHandlerArg
  XML_SetNamespaceDeclHandler
  XML_SetNotStandaloneHandler
  XML_SetNotationDeclHandler
  XML_SetProcessingInstructionHandler
  XML_SetUnknownEncodingHandler
  XML_SetUnparsedEntityDeclHandler
  XML_SetUserData
  XML_UseParserAsHandlerArg
  
  
  
  1.1                  apache-1.3/src/lib/expat-lite/xmlparsenw.def
  
  Index: xmlparsenw.def
  ===================================================================
  MODULE xmltok
  EXPORT @xmlparse.imp
  
  
  
  1.1                  apache-1.3/src/lib/expat-lite/xmltok.imp
  
  Index: xmltok.imp
  ===================================================================
  XmlGetUtf16InternalEncoding
  XmlGetUtf8InternalEncoding
  XmlInitEncoding
  XmlInitUnknownEncoding
  XmlParseXmlDecl
  XmlPrologStateInit
  XmlSizeOfUnknownEncoding
  XmlUtf16Encode
  XmlUtf8Encode
  
  
  1.1                  apache-1.3/src/lib/expat-lite/xmltoknw.def
  
  Index: xmltoknw.def
  ===================================================================
  EXPORT @xmltok.imp
  
  
  
  1.118     +6 -0      apache-1.3/src/main/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/alloc.c,v
  retrieving revision 1.117
  retrieving revision 1.118
  diff -u -r1.117 -r1.118
  --- alloc.c	1999/10/21 20:44:28	1.117
  +++ alloc.c	2000/06/01 23:42:24	1.118
  @@ -519,6 +519,12 @@
       return permanent_pool;
   }
   
  +void ap_cleanup_alloc()
  +{
  +    ap_destroy_mutex(alloc_mutex);
  +    ap_destroy_mutex(spawn_mutex);
  +}
  +
   API_EXPORT(void) ap_clear_pool(struct pool *a)
   {
       ap_block_alarms();
  
  
  
  1.153     +33 -1     apache-1.3/src/main/http_config.c
  
  Index: http_config.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_config.c,v
  retrieving revision 1.152
  retrieving revision 1.153
  diff -u -r1.152 -r1.153
  --- http_config.c	2000/03/13 20:47:08	1.152
  +++ http_config.c	2000/06/01 23:42:24	1.153
  @@ -300,6 +300,14 @@
    */
   static handler_func *method_ptrs;
   
  +
  +void ap_cleanup_method_ptrs()
  +{
  +    if (method_ptrs) {
  +        free(method_ptrs);
  +    }
  +}
  +
   /* routine to reconstruct all these shortcuts... called after every
    * add_module.
    * XXX: this breaks if modules dink with their methods pointers
  @@ -544,7 +552,11 @@
   	fprintf(stderr, "%s: module \"%s\" is not compatible with this "
   		"version of Apache.\n", ap_server_argv0, m->name);
   	fprintf(stderr, "Please contact the vendor for the correct version.\n");
  +#ifdef NETWARE
  +        clean_parent_exit(1);
  +#else    
   	exit(1);
  +#endif
       }
   
       if (m->next == NULL) {
  @@ -560,7 +572,11 @@
   		    " the dynamic\n", ap_server_argv0, m->name);
   	    fprintf(stderr, "module limit was reached. Please increase "
   		    "DYNAMIC_MODULE_LIMIT and recompile.\n");
  +#ifdef NETWARE
  +            clean_parent_exit(1);
  +#else
   	    exit(1);
  +#endif
   	}
       }
   
  @@ -698,7 +714,11 @@
           sizeof(module *)*(total_modules+DYNAMIC_MODULE_LIMIT+1));
       if (ap_loaded_modules == NULL) {
   	fprintf(stderr, "Ouch!  Out of memory in ap_setup_prelinked_modules()!\n");
  +#ifdef NETWARE
  +        clean_parent_exit(1);
  +#else
   	exit(1);
  +#endif
       }
       for (m = ap_preloaded_modules, m2 = ap_loaded_modules; *m != NULL; )
           *m2++ = *m++;
  @@ -1157,7 +1177,11 @@
   
       if (errmsg) {
           fprintf(stderr, "Syntax error in -C/-c directive:\n%s\n", errmsg);
  +#ifdef NETWARE
  +        clean_parent_exit(1);
  +#else
           exit(1);
  +#endif
       }
   
       ap_cfg_closefile(parms.config_file);
  @@ -1196,7 +1220,11 @@
   	perror("fopen");
   	fprintf(stderr, "%s: could not open document config file %s\n",
   		ap_server_argv0, fname);
  +#ifdef NETWARE
  +        clean_parent_exit(1);
  +#else
   	exit(1);
  +#endif
       }
   
       errmsg = ap_srm_command_loop(&parms, s->lookup_defaults);
  @@ -1205,7 +1233,11 @@
   	fprintf(stderr, "Syntax error on line %d of %s:\n",
   		parms.config_file->line_number, parms.config_file->name);
   	fprintf(stderr, "%s\n", errmsg);
  +#ifdef NETWARE
  +        clean_parent_exit(1);
  +#else
   	exit(1);
  +#endif
       }
   
       ap_cfg_closefile(parms.config_file);
  @@ -1639,7 +1671,7 @@
       for (n = 0; ap_loaded_modules[n]; ++n) {
   	printf("  %s\n", ap_loaded_modules[n]->name);
       }
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
       printf("suexec: %s\n",
   	   ap_suexec_enabled
   	       ? "enabled; valid wrapper " SUEXEC_BIN
  
  
  
  1.494     +57 -63    apache-1.3/src/main/http_main.c
  
  Index: http_main.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/main/http_main.c,v
  retrieving revision 1.493
  retrieving revision 1.494
  diff -u -r1.493 -r1.494
  --- http_main.c	2000/05/09 22:44:29	1.493
  +++ http_main.c	2000/06/01 23:42:25	1.494
  @@ -1104,7 +1104,7 @@
       unsigned int 	alarm_expiry_time;
   } TSD;
   
  -#define get_tsd            TSD* tsd = (TSD*) GetThreadDataAreaPtr();
  +#define get_tsd            TSD* tsd = (TSD*) Thread_Data_Area;
   #define current_conn       tsd->current_conn
   #define alarms_blocked     tsd->alarms_blocked
   #define alarm_pending      tsd->alarm_pending
  @@ -2194,15 +2194,26 @@
   }
   
   /* a clean exit from the parent with proper cleanup */
  +#ifdef NETWARE
  +void clean_parent_exit(int code) __attribute__((noreturn));
  +void clean_parent_exit(int code)
  +#else
   static void clean_parent_exit(int code) __attribute__((noreturn));
   static void clean_parent_exit(int code)
  +#endif
   {
   #ifdef NETWARE
       AMCSocketCleanup();
  +    ap_destroy_pool(pcommands);    
  +    free(ap_loaded_modules);    
  +    ap_cleanup_method_ptrs();    
  +    ap_destroy_pool(pglobal);
  +    ap_cleanup_alloc();
       ap_main_finished = TRUE;
  -#endif
  +#else
       /* Clear the pool - including any registered cleanups */
       ap_destroy_pool(pglobal);
  +#endif
       exit(code);
   }
   
  @@ -2512,6 +2523,7 @@
    * a while...
    */
   
  +#ifndef NETWARE
   /* number of calls to wait_or_timeout between writable probes */
   #ifndef INTERVAL_OF_WRITABLE_PROBES
   #define INTERVAL_OF_WRITABLE_PROBES 10
  @@ -2548,31 +2560,6 @@
   	}
       }
       return (-1);
  -#elif defined(NETWARE)
  -    struct timeval tv;
  -    int ret = 0;
  -
  -    ++wait_or_timeout_counter;
  -    if (wait_or_timeout_counter == INTERVAL_OF_WRITABLE_PROBES) {
  -	    wait_or_timeout_counter = 0;
  -#ifndef NO_OTHER_CHILD
  -	    probe_writable_fds();
  -#endif
  -    }
  -
  -    if (ret == -1 && errno == EINTR) {
  -	    return -1;
  -    }
  -
  -    if (ret > 0) {
  -	    return ret;
  -    }
  -    
  -    tv.tv_sec = SCOREBOARD_MAINTENANCE_INTERVAL / 1000000;
  -    tv.tv_usec = SCOREBOARD_MAINTENANCE_INTERVAL % 1000000;
  -    ap_select(0, NULL, NULL, NULL, &tv);
  -    return -1;
  -
   #else /* WIN32 */
       struct timeval tv;
       int ret;
  @@ -2602,7 +2589,7 @@
       return -1;
   #endif /* WIN32 */
   }
  -
  +#endif
   
   #if defined(NSIG)
   #define NumSIG NSIG
  @@ -3168,7 +3155,7 @@
   {
       int result = 0;
   
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
       struct stat wrapper;
   
       if ((stat(SUEXEC_BIN, &wrapper)) != 0) {
  @@ -3450,10 +3437,6 @@
       do {
   	listen_rec *nr = malloc(sizeof *nr);
   
  -#ifdef NETWARE
  -        ThreadSwitch();
  -#endif
  -	
           if (nr == NULL) {
               fprintf(stderr, "Ouch!  malloc failed in copy_listeners()\n");
               exit(1);
  @@ -3552,9 +3535,6 @@
   
       lr = head_listener;
       do {
  -#ifdef NETWARE
  -	ThreadSwitch();
  -#endif
   	if (FD_ISSET(lr->fd, main_fds)) {
   	    head_listener = lr->next;
   	    return (lr);
  @@ -5317,13 +5297,11 @@
       TSD* tsd = NULL;
   
       while(tsd == NULL) {
  -        tsd = (TSD*) GetThreadDataAreaPtr();
  +        tsd = (TSD*) Thread_Data_Area;
           ThreadSwitchWithDelay();
       }
  -
  -    SetCurrentNameSpace(4);
  -    SetTargetNameSpace(4);
   
  +    init_name_space();
       ap_thread_count++;
   #endif
   
  @@ -5344,7 +5322,7 @@
   #endif
   
   #ifdef NETWARE
  -    tsd = (TSD*) GetThreadDataAreaPtr();
  +    tsd = (TSD*) Thread_Data_Area;
   #endif
   
       while (1) {
  @@ -5421,9 +5399,6 @@
   	 * until no requests are left or we decide to close.
   	 */
   	while ((r = ap_read_request(current_conn)) != NULL) {
  -#ifdef NETWARE
  -            ThreadSwitch();
  -#endif
               (void) ap_update_child_status(child_num, SERVER_BUSY_WRITE, r);
   
   	    if (r->status == HTTP_OK)
  @@ -5488,9 +5463,10 @@
        */
   #ifdef NETWARE
       TSD Tsd;
  -
  +    int *thread_ptr;
       memset(&Tsd, 0, sizeof(TSD));
  -	SaveThreadDataAreaPtr(&Tsd);
  +    thread_ptr = __get_thread_data_area_ptr();
  +    *thread_ptr = (int) &Tsd;
   	child_sub_main((int)child_num_arg);
   #else
       child_sub_main(child_num_arg);
  @@ -5650,15 +5626,16 @@
       int clen;
       int csd;
       struct sockaddr_in sa_client;
  -    int total_jobs = 0;
       thread **child_handles;
       int rv;
       int i;
       struct timeval tv;
       int my_pid;
  -    
       int count_select_errors = 0;
       pool *pchild;
  +    module **m;    
  +    listen_rec* lr;
  +    
   
       pchild = ap_make_sub_pool(pconf);
   
  @@ -5691,6 +5668,22 @@
       
       set_signals();
   
  +    /* Display listening ports */
  +    printf("   Listening on port(s):");
  +    lr = ap_listeners;
  +    do {
  +       printf(" %d", ntohs(lr->local_addr.sin_port));
  +       lr = lr->next;
  +    } while(lr && lr != ap_listeners);
  +    
  +    /* Display dynamic modules loaded */
  +    printf("\n");    
  +    for (m = ap_loaded_modules; *m != NULL; m++) {
  +        if (((module*)*m)->dynamic_load_handle) {
  +            printf("   Loaded dynamic module %s\n", ap_find_module_name(*m));
  +        }
  +    }
  +
       /*
        * - Initialize allowed_globals
        * - Create the thread table
  @@ -5779,7 +5772,6 @@
           }
           else {
               add_job(csd);
  -            total_jobs++;
           }
       }
         
  @@ -5787,8 +5779,7 @@
   
       /* Get ready to shutdown and exit */
       allowed_globals.exit_now = 1;
  -    ap_release_mutex(start_mutex);
  -
  +    
       for (i = 0; i < nthreads; i++) {
           add_job(-1);
       }
  @@ -6585,11 +6576,6 @@
       }
       return;
   }
  -
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
   #endif
   
   #if defined(NETWARE)
  @@ -6613,12 +6599,13 @@
   
   #ifdef NETWARE
       TSD Tsd;
  +    int *thread_ptr;
   
  -    SetCurrentNameSpace(4);
  -    SetTargetNameSpace(4);
  +    init_name_space();
       signal(SIGTERM, signal_handler);
  -    memset(&Tsd, 0, sizeof(Tsd));
  -    SaveThreadDataAreaPtr(&Tsd);
  +    memset(&Tsd, 0, sizeof(TSD));
  +    thread_ptr = __get_thread_data_area_ptr();
  +    *thread_ptr = (int) &Tsd;    
   #else
       /* Service application
        * Configuration file in registry at:
  @@ -6706,6 +6693,11 @@
   	    signal_to_send = optarg;
   	    break;
   #endif /* WIN32 */
  +#ifdef NETWARE
  +    case 's':
  +        DestroyScreen(GetCurrentScreen());
  +        break;
  +#endif
   	case 'd':
               optarg = ap_os_canonical_filename(pcommands, optarg);
               if (!ap_os_is_path_absolute(optarg)) {
  @@ -6842,13 +6834,15 @@
   
       post_parse_init();
   
  -#ifdef OS2
  +#if defined(OS2)
       printf("%s running...\n", ap_get_server_version());
  -#endif
  -#if defined(WIN32) || defined(NETWARE)
  +#elif defined(WIN32)
       if (!child) {
   	printf("%s running...\n", ap_get_server_version());
       }
  +#elif defined(NETWARE)
  +    clrscr();
  +    printf("%s running...\n", ap_get_server_version());
   #endif
   
   #ifndef NETWARE
  
  
  
  1.70      +0 -6      apache-1.3/src/modules/proxy/mod_proxy.c
  
  Index: mod_proxy.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/mod_proxy.c,v
  retrieving revision 1.69
  retrieving revision 1.70
  diff -u -r1.69 -r1.70
  --- mod_proxy.c	2000/03/01 09:13:38	1.69
  +++ mod_proxy.c	2000/06/01 23:42:26	1.70
  @@ -957,9 +957,3 @@
   };
   
   
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.68      +1 -1      apache-1.3/src/modules/proxy/proxy_cache.c
  
  Index: proxy_cache.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_cache.c,v
  retrieving revision 1.67
  retrieving revision 1.68
  diff -u -r1.67 -r1.68
  --- proxy_cache.c	2000/06/01 17:51:26	1.67
  +++ proxy_cache.c	2000/06/01 23:42:26	1.68
  @@ -1071,7 +1071,7 @@
       buff[35] = ' ';
   
   /* open temporary file */
  -#ifndef TPF
  +#if !defined(TPF) && !defined(NETWARE)
   #define TMPFILESTR	"/tmpXXXXXX"
       if (conf->cache.root == NULL)
   	return DECLINED;
  
  
  
  1.88      +1 -1      apache-1.3/src/modules/proxy/proxy_util.c
  
  Index: proxy_util.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/proxy/proxy_util.c,v
  retrieving revision 1.87
  retrieving revision 1.88
  diff -u -r1.87 -r1.88
  --- proxy_util.c	2000/03/01 09:13:38	1.87
  +++ proxy_util.c	2000/06/01 23:42:26	1.88
  @@ -517,7 +517,7 @@
   
       ap_kill_timeout(r);
   
  -#if defined(WIN32) || defined(TPF)
  +#if defined(WIN32) || defined(TPF) || defined(NETWARE)
       /* works fine under win32, so leave it */
       ap_hard_timeout("proxy send body", r);
       alternate_timeouts = 0;
  
  
  
  1.39      +0 -7      apache-1.3/src/modules/standard/mod_auth_anon.c
  
  Index: mod_auth_anon.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_auth_anon.c,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- mod_auth_anon.c	2000/03/16 15:43:56	1.38
  +++ mod_auth_anon.c	2000/06/01 23:42:27	1.39
  @@ -313,10 +313,3 @@
       NULL,			/* child_exit */
       NULL			/* post read-request */
   };
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.39      +0 -7      apache-1.3/src/modules/standard/mod_cern_meta.c
  
  Index: mod_cern_meta.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_cern_meta.c,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- mod_cern_meta.c	2000/02/05 12:33:16	1.38
  +++ mod_cern_meta.c	2000/06/01 23:42:27	1.39
  @@ -396,10 +396,3 @@
       NULL			/* post read-request */
   };
   
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.44      +0 -7      apache-1.3/src/modules/standard/mod_digest.c
  
  Index: mod_digest.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_digest.c,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- mod_digest.c	2000/01/12 15:23:24	1.43
  +++ mod_digest.c	2000/06/01 23:42:27	1.44
  @@ -390,10 +390,3 @@
       NULL			/* post read-request */
   };
   
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.35      +0 -7      apache-1.3/src/modules/standard/mod_expires.c
  
  Index: mod_expires.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_expires.c,v
  retrieving revision 1.34
  retrieving revision 1.35
  diff -u -r1.34 -r1.35
  --- mod_expires.c	2000/02/02 20:44:02	1.34
  +++ mod_expires.c	2000/06/01 23:42:27	1.35
  @@ -510,10 +510,3 @@
       NULL                        /* post read-request */
   };
   
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.23      +0 -6      apache-1.3/src/modules/standard/mod_headers.c
  
  Index: mod_headers.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_headers.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- mod_headers.c	1999/10/27 09:26:53	1.22
  +++ mod_headers.c	2000/06/01 23:42:28	1.23
  @@ -264,10 +264,4 @@
       NULL                        /* post read-request */
   };
   
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
   
  
  
  
  1.123     +8 -8      apache-1.3/src/modules/standard/mod_include.c
  
  Index: mod_include.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_include.c,v
  retrieving revision 1.122
  retrieving revision 1.123
  diff -u -r1.122 -r1.123
  --- mod_include.c	2000/02/02 20:44:03	1.122
  +++ mod_include.c	2000/06/01 23:42:28	1.123
  @@ -113,7 +113,7 @@
   /* XXX: could use ap_table_overlap here */
   static void add_include_vars(request_rec *r, char *timefmt)
   {
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
       struct passwd *pw;
   #endif /* ndef WIN32 */
       table *e = r->subprocess_env;
  @@ -611,7 +611,7 @@
       }
   
       ap_destroy_sub_req(rr);
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
       ap_chdir_file(r->filename);
   #endif
   
  @@ -733,7 +733,7 @@
               if (!error_fmt && ap_run_sub_req(rr)) {
                   error_fmt = "unable to include \"%s\" in parsed file %s";
               }
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
               ap_chdir_file(r->filename);
   #endif
               if (error_fmt) {
  @@ -889,7 +889,7 @@
                   ap_rputs(error, r);
               }
               /* just in case some stooge changed directories */
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
               ap_chdir_file(r->filename);
   #endif
           }
  @@ -901,7 +901,7 @@
                   ap_rputs(error, r);
               }
               /* grumble groan */
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
               ap_chdir_file(r->filename);
   #endif
           }
  @@ -2178,7 +2178,7 @@
       printing = conditional_status = 1;
       if_nesting = 0;
   
  -#ifndef WIN32
  +#if !defined(WIN32) && !defined(NETWARE)
       ap_chdir_file(r->filename);
   #endif
       if (r->args) {              /* add QUERY stuff to env cause it ain't yet */
  @@ -2375,7 +2375,7 @@
       }
   
       if ((*state == xbithack_full)
  -#if !defined(OS2) && !defined(WIN32)
  +#if !defined(OS2) && !defined(WIN32) && !defined(NETWARE)
       /*  OS/2 dosen't support Groups. */
           && (r->finfo.st_mode & S_IXGRP)
   #endif
  @@ -2500,7 +2500,7 @@
   
   static int xbithack_handler(request_rec *r)
   {
  -#if defined(OS2) || defined(WIN32)
  +#if defined(OS2) || defined(WIN32) || defined(NETWARE)
       /* OS/2 dosen't currently support the xbithack. This is being worked on. */
       return DECLINED;
   #else
  
  
  
  1.49      +1 -8      apache-1.3/src/modules/standard/mod_info.c
  
  Index: mod_info.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_info.c,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- mod_info.c	2000/05/09 22:44:30	1.48
  +++ mod_info.c	2000/06/01 23:42:28	1.49
  @@ -103,7 +103,7 @@
   } info_cfg_lines;
   
   module MODULE_VAR_EXPORT info_module;
  -module API_VAR_EXPORT *top_module;
  +extern module API_VAR_EXPORT *top_module;
   
   static void *create_info_config(pool *p, server_rec *s)
   {
  @@ -694,10 +694,3 @@
       NULL                        /* post read-request */
   };
   
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.82      +1 -1      apache-1.3/src/modules/standard/mod_log_config.c
  
  Index: mod_log_config.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_log_config.c,v
  retrieving revision 1.81
  retrieving revision 1.82
  diff -u -r1.81 -r1.82
  --- mod_log_config.c	2000/02/02 20:44:04	1.81
  +++ mod_log_config.c	2000/06/01 23:42:28	1.82
  @@ -183,7 +183,7 @@
   module MODULE_VAR_EXPORT config_log_module;
   
   static int xfer_flags = (O_WRONLY | O_APPEND | O_CREAT);
  -#if defined(OS2) || defined(WIN32)
  +#if defined(OS2) || defined(WIN32) || defined(NETWARE)
   /* OS/2 dosen't support users and groups */
   static mode_t xfer_mode = (S_IREAD | S_IWRITE);
   #else
  
  
  
  1.157     +7 -10     apache-1.3/src/modules/standard/mod_rewrite.c
  
  Index: mod_rewrite.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_rewrite.c,v
  retrieving revision 1.156
  retrieving revision 1.157
  diff -u -r1.156 -r1.157
  --- mod_rewrite.c	2000/03/01 09:13:39	1.156
  +++ mod_rewrite.c	2000/06/01 23:42:28	1.157
  @@ -2194,7 +2194,7 @@
           }
       }
       else if (strcmp(p->pattern, "-l") == 0) {
  -#if !defined(OS2) && !defined(WIN32)
  +#if !defined(OS2) && !defined(WIN32)  && !defined(NETWARE)
           if (lstat(input, &sb) == 0) {
               if (S_ISLNK(sb.st_mode)) {
                   rc = 1;
  @@ -3109,7 +3109,9 @@
       char *fname;
       piped_log *pl;
       int    rewritelog_flags = ( O_WRONLY|O_APPEND|O_CREAT );
  -#ifdef WIN32
  +#if defined(NETWARE)
  +    mode_t rewritelog_mode  = ( S_IREAD|S_IWRITE );
  +#elif defined(WIN32)
       mode_t rewritelog_mode  = ( _S_IREAD|_S_IWRITE );
   #else
       mode_t rewritelog_mode  = ( S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH );
  @@ -3267,7 +3269,9 @@
   ** +-------------------------------------------------------+
   */
   
  -#ifdef WIN32
  +#if defined(NETWARE)
  +#define REWRITELOCK_MODE ( S_IREAD|S_IWRITE )
  +#elif defined(WIN32)
   #define REWRITELOCK_MODE ( _S_IREAD|_S_IWRITE )
   #else
   #define REWRITELOCK_MODE ( S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH )
  @@ -4274,12 +4278,5 @@
       }
       return 0;
   }
  -
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
   
   /*EOF*/
  
  
  
  1.37      +0 -6      apache-1.3/src/modules/standard/mod_speling.c
  
  Index: mod_speling.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_speling.c,v
  retrieving revision 1.36
  retrieving revision 1.37
  diff -u -r1.36 -r1.37
  --- mod_speling.c	2000/02/16 17:31:16	1.36
  +++ mod_speling.c	2000/06/01 23:42:29	1.37
  @@ -558,9 +558,3 @@
       NULL                        /* post read-request */
   };
   
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.113     +0 -6      apache-1.3/src/modules/standard/mod_status.c
  
  Index: mod_status.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_status.c,v
  retrieving revision 1.112
  retrieving revision 1.113
  diff -u -r1.112 -r1.113
  --- mod_status.c	2000/02/05 12:33:16	1.112
  +++ mod_status.c	2000/06/01 23:42:29	1.113
  @@ -769,9 +769,3 @@
       NULL			/* post read-request */
   };
   
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
  
  
  
  1.44      +0 -6      apache-1.3/src/modules/standard/mod_usertrack.c
  
  Index: mod_usertrack.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/modules/standard/mod_usertrack.c,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- mod_usertrack.c	1999/10/29 21:29:53	1.43
  +++ mod_usertrack.c	2000/06/01 23:42:29	1.44
  @@ -384,10 +384,4 @@
   };
   
   
  -#ifdef NETWARE
  -int main(int argc, char *argv[]) 
  -{
  -    ExitThread(TSR_THREAD, 0);
  -}
  -#endif
   
  
  
  
  1.2       +1 -0      apache-1.3/src/os/netware/ApacheCore.imp
  
  Index: ApacheCore.imp
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/os/netware/ApacheCore.imp,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ApacheCore.imp	2000/01/11 21:50:26	1.1
  +++ ApacheCore.imp	2000/06/01 23:42:31	1.2
  @@ -344,4 +344,5 @@
   ap_get_virthost_addr
   ap_listeners
   ap_listenbacklog
  +clean_parent_exit
   
  
  
  
  1.2       +8 -6      apache-1.3/src/os/netware/multithread.c
  
  Index: multithread.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/os/netware/multithread.c,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- multithread.c	2000/01/11 21:52:04	1.1
  +++ multithread.c	2000/06/01 23:42:31	1.2
  @@ -6,7 +6,6 @@
   #include <nwsemaph.h>
   
   
  -
   thread *create_thread(void (thread_fn)(void *), void *thread_arg)
   {
       int rv;
  @@ -34,27 +33,30 @@
   
   mutex * ap_create_mutex(char *name)
   {
  -    return(malloc(1));
  +    return (mutex*)kMutexAlloc(name);
   }
   
   mutex * ap_open_mutex(char *name)
   {
  -	return((mutex*)EnterCritSec());
  +	return(NULL);
   }
   
   int ap_acquire_mutex(mutex *mutex_id)
   {
  -	return(EnterCritSec());
  +    return(kMutexLock(mutex_id));
   }
   
   int ap_release_mutex(mutex *mutex_id)
   {
  -	return(ExitCritSec());
  +    if (kMutexUnlock(mutex_id))
  +        return 0;
  +    else
  +        return 1;
   }
   
   void ap_destroy_mutex(mutex *mutex_id)
   {
  -    free(mutex_id);
  +    kMutexFree(mutex_id);
   }
   
   
  
  
  
  1.3       +11 -3     apache-1.3/src/os/netware/os.c
  
  Index: os.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/os/netware/os.c,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- os.c	2000/01/11 21:52:06	1.2
  +++ os.c	2000/06/01 23:42:31	1.3
  @@ -56,6 +56,7 @@
    */
   
   #include "ap_config.h"
  +#include <dirent.h>
   
   void ap_os_dso_init(void)
   {
  @@ -68,14 +69,15 @@
       
       moduleName = strrchr(path, '/');
   
  -    if (moduleName)
  +    if (moduleName) {
           moduleName++;
  +    }
       
  -    nlmHandle = FindNLMHandle((char*)moduleName);
  +    nlmHandle = FindNLMHandleInAddressSpace((char*)moduleName, NULL);
   
       if (nlmHandle == NULL) {
           spawnlp(P_NOWAIT | P_SPAWN_IN_CURRENT_DOMAIN, path, NULL);        
  -        nlmHandle = FindNLMHandle((char *)moduleName);
  +        nlmHandle = FindNLMHandleInAddressSpace((char*)moduleName, NULL);
       }
   
       return (void *)nlmHandle;
  @@ -122,3 +124,9 @@
       return str;
   }
   
  +void init_name_space()
  +{
  +    UnAugmentAsterisk(TRUE);
  +    SetCurrentNameSpace(NW_NS_LONG);
  +    SetTargetNameSpace(NW_NS_LONG);
  +}
  
  
  
  1.3       +4 -4      apache-1.3/src/os/netware/os.h
  
  Index: os.h
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/os/netware/os.h,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- os.h	2000/01/11 21:52:07	1.2
  +++ os.h	2000/06/01 23:42:31	1.3
  @@ -76,6 +76,7 @@
   #include <nwthread.h>
   #include <nwmalloc.h>
   #include <nwnamspc.h>
  +#include <nwlib.h>
   #include <nwadv.h>
   #include <ws2nlm.h>
   #include <winsock2.h>
  @@ -106,8 +107,6 @@
   #define FD_SETSIZE 128
   #define NO_DBM_REWRITEMAP
   
  -
  -
   #define crypt(buf,salt)	    (buf)
   #define sleep(t) delay(t*1000)
   #define getpid GetThreadID
  @@ -121,11 +120,11 @@
   
   /* Prototypes */
   void AMCSocketCleanup(void);
  -static void clean_parent_exit(int code);
  +void clean_parent_exit(int code);
   
   inline int ap_os_is_path_absolute(const char *file)
   {
  -    if (strstr(file, ":/"))
  +    if ((file[0] == '/') || strchr(file, ':'))
           return 1;
       else
           return 0;
  @@ -139,5 +138,6 @@
   const char *ap_os_dso_error(void);
   char *remove_filename(char*);
   char *bslash2slash(char*);
  +void init_name_space(void);
   #endif /*! APACHE_OS_H*/
   
  
  
  
  1.1                  apache-1.3/src/os/netware/ApacheModuleTLS.def
  
  Index: ApacheModuleTLS.def
  ===================================================================
  MODULE wspssl
  EXPORT tls_module
  
  
  
  
  1.1                  apache-1.3/src/os/netware/apache.xdc
  
  	<<Binary file>>
  
  
  1.1                  apache-1.3/src/os/netware/libpre.c
  
  Index: libpre.c
  ===================================================================
  /*------------------------------------------------------------------
    These functions are to be called when the shared NLM starts and
    stops.  By using these functions instead of defining a main()
    and calling ExitThread(TSR_THREAD, 0), the load time of the
    shared NLM is faster and memory size reduced.
     
    You may also want to override these in your own Apache module
    to do any cleanup other than the mechanism Apache modules
    provide.
  ------------------------------------------------------------------*/
  
  int _lib_start()
  {
      return 0;
  }
  
  int _lib_stop()
  {
      return 0;
  }
  
  
  
  1.1                  apache-1.3/src/os/netware/libprews.c
  
  Index: libprews.c
  ===================================================================
  /*------------------------------------------------------------------
    These functions are to be called when the shared NLM starts and
    stops.  By using these functions instead of defining a main()
    and calling ExitThread(TSR_THREAD, 0), the load time of the
    shared NLM is faster and memory size reduced.
     
    You may also want to override these in your own Apache module
    to do any cleanup other than the mechanism Apache modules
    provide.
  ------------------------------------------------------------------*/
  #include "stddef.h"
  #include "ws2nlm.h"
  
  int _lib_start_ws()
  {
      WSADATA wsaData;
      
      return WSAStartup((WORD) MAKEWORD(2, 0), &wsaData);
  }
  
  int _lib_stop_ws()
  {
      WSACleanup();
      return 0;
  }
  
  
  
  1.1                  apache-1.3/src/os/netware/mod_tls.c
  
  Index: mod_tls.c
  ===================================================================
  /* ====================================================================
   * Copyright (c) 1995-1999 The Apache Group.  All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer. 
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. All advertising materials mentioning features or use of this
   *    software must display the following acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * 4. The names "Apache Server" and "Apache Group" must not be used to
   *    endorse or promote products derived from this software without
   *    prior written permission. For written permission, please contact
   *    apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * 6. Redistributions of any form whatsoever must retain the following
   *    acknowledgment:
   *    "This product includes software developed by the Apache Group
   *    for use in the Apache HTTP server project (http://www.apache.org/)."
   *
   * THIS SOFTWARE IS PROVIDED BY THE APACHE GROUP ``AS IS'' AND ANY
   * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
   * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE APACHE GROUP OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
   * OF THE POSSIBILITY OF SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Group and was originally based
   * on public domain software written at the National Center for
   * Supercomputing Applications, University of Illinois, Urbana-Champaign.
   * For more information on the Apache Group and the Apache HTTP server
   * project, please see <http://www.apache.org/>.
   *
   */
  
  /*
   * mod_tls.c - Apache SSL/TLS module for NetWare by Mike Gardiner.
   *
   * This module gives Apache the ability to do SSL/TLS with a minimum amount
   * of effort.  All of the SSL/TLS logic is already on NetWare versions 5 and
   * above and is interfaced through WinSock on NetWare.  As you can see in
   * the code below SSL/TLS sockets can be created with three WinSock calls.
   *
   * To load, simply place the module in the modules directory under the main
   * apache tree.  Then add a "SecureListen" with two arguments.  The first
   * argument is an address and/or port.  The second argument is the key pair
   * name as created in ConsoleOne.
   *
   *  Examples:
   *
   *          SecureListen 443 "SSL CertificateIP"  
   *          SecureListen 123.45.67.89:443 mycert
   */
  
  #define CORE_PRIVATE
  #define WS_SSL
  
  #define  MAX_ADDRESS  512
  #define  MAX_KEY       80
  
  #include "httpd.h"
  #include "http_config.h"
  #include "http_conf_globals.h"
  #include "http_log.h"
  #include "http_main.h"
  
  module MODULE_VAR_EXPORT tls_module;
  
  typedef struct TLSSrvConfigRec TLSSrvConfigRec;
  typedef struct seclisten_rec seclisten_rec;
  static fd_set listenfds;
  
  struct seclisten_rec {
      seclisten_rec *next;
      struct sockaddr_in local_addr;	/* local IP address and port */
      int fd;
      int used;			            /* Only used during restart */
      char key[MAX_KEY];
  };
  
  struct TLSSrvConfigRec {
      table *sltable;
  };
  
  static seclisten_rec* ap_seclisteners = NULL;
  
  #define get_tls_cfg(srv) (TLSSrvConfigRec *) ap_get_module_config(srv->module_config, &tls_module)
  
  
  static int find_secure_listener(seclisten_rec *lr)
  {
      seclisten_rec *sl;
  
      for (sl = ap_seclisteners; sl; sl = sl->next) {
          if (!memcmp(&sl->local_addr, &lr->local_addr, sizeof(sl->local_addr))) {
              sl->used = 1;
              return sl->fd;
          }
      }    
      return -1;
  }
  
  
  static int make_secure_socket(pool *p, const struct sockaddr_in *server,
                                char* key, server_rec *server_conf)
  {
      int s;
      int one = 1;
      char addr[MAX_ADDRESS];
      struct sslserveropts opts;
      struct linger li;
      unsigned short optParam;
      WSAPROTOCOL_INFO SecureProtoInfo;
      int no = 1;
      
      if (server->sin_addr.s_addr != htonl(INADDR_ANY))
          ap_snprintf(addr, sizeof(addr), "address %s port %d",
              inet_ntoa(server->sin_addr), ntohs(server->sin_port));
      else
          ap_snprintf(addr, sizeof(addr), "port %d", ntohs(server->sin_port));
  
      /* note that because we're about to slack we don't use psocket */
      ap_block_alarms();
      memset(&SecureProtoInfo, 0, sizeof(WSAPROTOCOL_INFO));
  
      SecureProtoInfo.iAddressFamily = AF_INET;
      SecureProtoInfo.iSocketType = SOCK_STREAM;
      SecureProtoInfo.iProtocol = IPPROTO_TCP;   
      SecureProtoInfo.iSecurityScheme = SECURITY_PROTOCOL_SSL;
  
      s = WSASocket(AF_INET, SOCK_STREAM, IPPROTO_TCP,
              (LPWSAPROTOCOL_INFO)&SecureProtoInfo, 0, 0);
              
      if (s == INVALID_SOCKET) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: failed to get a socket for %s", addr);
          ap_unblock_alarms();
          return -1;
      }
          
      optParam = SO_SSL_ENABLE | SO_SSL_SERVER;
  		
      if (WSAIoctl(s, SO_SSL_SET_FLAGS, (char *)&optParam,
          sizeof(unsigned short), NULL, 0, NULL, NULL, NULL)) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_FLAGS)", addr);
          ap_unblock_alarms();
          return -1;
      }
  
      opts.cert = key;
      opts.certlen = strlen(key);
      opts.sidtimeout = 0;
      opts.sidentries = 0;
      opts.siddir = NULL;
  
      if (WSAIoctl(s, SO_SSL_SET_SERVER, (char *)&opts, sizeof(opts),
          NULL, 0, NULL, NULL, NULL) != 0) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: for %s, WSAIoctl: (SO_SSL_SET_SERVER)", addr);
          ap_unblock_alarms();
          return -1;
      }
  
      if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof(int)) < 0) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: for %s, setsockopt: (SO_REUSEADDR)", addr);
          ap_unblock_alarms();
          return -1;
      }
  
      one = 1;
  #ifdef SO_KEEPALIVE
      if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, (char *) &one, sizeof(int)) < 0) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: for %s, setsockopt: (SO_KEEPALIVE)", addr);
  #endif
          ap_unblock_alarms();
          return -1;
      }
  
      if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (char *) &no, sizeof(int)) < 0) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_WARNING, server_conf,
              "setsockopt: (TCP_NODELAY)");
      }
  
      if (server_conf->send_buffer_size) {
          if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
              (char *) &server_conf->send_buffer_size, sizeof(int)) < 0) {
              errno = WSAGetLastError();
              ap_log_error(APLOG_MARK, APLOG_WARNING, server_conf,
                  "make_secure_socket: failed to set SendBufferSize for %s, "
  			    "using default", addr);
  			ap_unblock_alarms();
  	        return -1;
          }
      }
  
      if (bind(s, (struct sockaddr *) server, sizeof(struct sockaddr_in)) == -1) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_CRIT, server_conf,
              "make_secure_socket: could not bind to %s", addr);
          ap_unblock_alarms();
          return -1;
      }
  
      if (listen(s, ap_listenbacklog) == -1) {
          errno = WSAGetLastError();
          ap_log_error(APLOG_MARK, APLOG_ERR, server_conf,
              "make_secure_socket: unable to listen for connections on %s", addr);
          ap_unblock_alarms();
          return -1;
      }
  
      ap_unblock_alarms();
      return s;
  }
  
  static const char *set_secure_listener(cmd_parms *cmd, void *dummy, char *ips, char* key)
  {
      TLSSrvConfigRec* sc = get_tls_cfg(cmd->server);
      const char *err = ap_check_cmd_context(cmd, GLOBAL_ONLY);
      char *ports;
      unsigned short port;
      seclisten_rec *new;
  
      
      if (err != NULL) 
          return err;
  
      ports = strchr(ips, ':');
      
      if (ports != NULL) {    
  	    if (ports == ips)
  	        return "Missing IP address";
  	    else if (ports[1] == '\0')
  	        return "Address must end in :<port-number>";
  	        
  	    *(ports++) = '\0';
      }
      else {
  	    ports = ips;
      }
      
      new = ap_pcalloc(cmd->pool, sizeof(seclisten_rec)); 
      new->local_addr.sin_family = AF_INET;
      
      if (ports == ips)
  	    new->local_addr.sin_addr.s_addr = htonl(INADDR_ANY);
      else
  	    new->local_addr.sin_addr.s_addr = ap_get_virthost_addr(ips, NULL);
      
      port = atoi(ports);
      
      if (!port) 
  	    return "Port must be numeric";
  	    
      ap_table_set(sc->sltable, ports, "T");
      
      new->local_addr.sin_port = htons(port);
      new->fd = -1;
      new->used = 0;
      new->next = ap_seclisteners;
      strcpy(new->key, key);
      ap_seclisteners = new;
      return NULL;
  }
  
  static void InitTLS(server_rec *s, pool *p)
  {
      seclisten_rec* sl;
      listen_rec* lr;
      
      for (sl = ap_seclisteners; sl != NULL; sl = sl->next) {
          sl->fd = find_secure_listener(sl);
  
          if (sl->fd < 0)
              sl->fd = make_secure_socket(p, &sl->local_addr, sl->key, s);            
          else
              ap_note_cleanups_for_socket(p, sl->fd);
              
          if (sl->fd >= 0) {
              FD_SET(sl->fd, &listenfds);
              ap_note_cleanups_for_socket(p, sl->fd);
              
              lr = ap_pcalloc(p, sizeof(listen_rec));
          
              if (lr) {
                  lr->local_addr = sl->local_addr;
                  lr->used = 0;
                  lr->fd = sl->fd;
                  lr->next = ap_listeners;
                  ap_listeners = lr;
              }                        
          } else {
              clean_parent_exit(1);
          }
      } 
  }
  
  void *tls_config_server_create(pool *p, server_rec *s)
  {
      TLSSrvConfigRec *new = ap_palloc(p, sizeof(TLSSrvConfigRec));
      new->sltable = ap_make_table(p, 5);
      return new;
  }
  
  void *tls_config_server_merge(pool *p, void *basev, void *addv)
  {
      TLSSrvConfigRec *base = (TLSSrvConfigRec *)basev;
      TLSSrvConfigRec *add  = (TLSSrvConfigRec *)addv;
      TLSSrvConfigRec *merged  = (TLSSrvConfigRec *)ap_palloc(p, sizeof(TLSSrvConfigRec));
      return merged;
  }
  
  int tls_hook_Fixup(request_rec *r)
  {
      TLSSrvConfigRec *sc = get_tls_cfg(r->server);
      table *e = r->subprocess_env;    
      const char *s_secure;
      char port[8];
      
      itoa(r->server->port, port, 10);
      s_secure = ap_table_get(sc->sltable, port);    
      
      if (!s_secure)
          return DECLINED;
      
      ap_table_set(e, "HTTPS", "on");
      
      return DECLINED;
  }
  
  static const command_rec tls_module_cmds[] = {
      { "SecureListen", set_secure_listener, NULL, RSRC_CONF, TAKE2,
        "specify an address and/or port with a key pair name"},
      { NULL }
  };
  
  module MODULE_VAR_EXPORT tls_module =
  {
      STANDARD_MODULE_STUFF,
      InitTLS,                  /* initializer */
      NULL,                     /* dir config creater */
      NULL,                     /* dir merger --- default is to override */
      tls_config_server_create, /* server config */
      tls_config_server_merge,  /* merge server config */
      tls_module_cmds,          /* command table */
      NULL,                     /* handlers */
      NULL,                     /* filename translation */
      NULL,                     /* check_user_id */
      NULL,                     /* check auth */
      NULL,                     /* check access */
      NULL,                     /* type_checker */    
      tls_hook_Fixup,           /* fixups */
      NULL,                     /* logger */
  };
  
  
  
  
  
  1.42      +5 -5      apache-1.3/src/support/htpasswd.c
  
  Index: htpasswd.c
  ===================================================================
  RCS file: /home/cvs/apache-1.3/src/support/htpasswd.c,v
  retrieving revision 1.41
  retrieving revision 1.42
  diff -u -r1.41 -r1.42
  --- htpasswd.c	2000/05/25 16:45:58	1.41
  +++ htpasswd.c	2000/06/01 23:42:33	1.42
  @@ -262,12 +262,12 @@
       fprintf(stderr, " -c  Create a new file.\n");
       fprintf(stderr, " -n  Don't update file; display results on stdout.\n");
       fprintf(stderr, " -m  Force MD5 encryption of the password"
  -#if defined(WIN32) || defined(TPF)
  +#if defined(WIN32) || defined(TPF) || defined(NETWARE)
   	" (default)"
   #endif
   	".\n");
       fprintf(stderr, " -d  Force CRYPT encryption of the password"
  -#if (!(defined(WIN32) || defined(TPF)))
  +#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
   	    " (default)"
   #endif
   	    ".\n");
  @@ -276,7 +276,7 @@
       fprintf(stderr, " -b  Use the password from the command line rather "
   	    "than prompting for it.\n");
       fprintf(stderr,
  -	    "On Windows and TPF systems the '-m' flag is used by default.\n");
  +	    "On Windows, TPF and NetWare systems the '-m' flag is used by default.\n");
       fprintf(stderr,
   	    "On all other systems, the '-p' flag will probably not work.\n");
       return ERR_SYNTAX;
  @@ -476,14 +476,14 @@
   	alg = ALG_APMD5;
   	fprintf(stderr, "Automatically using MD5 format on Windows.\n");
       }
  -#elif defined(TPF)
  +#elif defined(TPF) || defined(NETWARE)
       if (alg == ALG_CRYPT) {
           alg = ALG_APMD5;
           fprintf(stderr, "Automatically using MD5 format.\n");
        }
   #endif
   
  -#if (!(defined(WIN32) || defined(TPF)))
  +#if (!(defined(WIN32) || defined(TPF) || defined(NETWARE)))
       if (alg == ALG_PLAIN) {
   	fprintf(stderr,"Warning: storing passwords as plain text might "
   		"just not work on this platform.\n");
  
  
  

Re: cvs commit: apache-1.3/src/support htpasswd.c htdigest.mcp.gz htpasswd.mcp.gz

Posted by Greg Stein <gs...@lyra.org>.
On 1 Jun 2000 wrowe@locus.apache.org wrote:
> wrowe       00/06/01 16:42:33
> 
>   Modified:    conf     httpd.conf-dist.nw
>                htdocs/manual netware.html
>                src      ApacheNW.mcp.gz
>                src/include alloc.h ap_config.h http_config.h
>                src/main alloc.c http_config.c http_main.c
>                src/modules/proxy mod_proxy.c proxy_cache.c proxy_util.c
>                src/modules/standard mod_auth_anon.c mod_cern_meta.c
>                         mod_digest.c mod_expires.c mod_headers.c
>                         mod_include.c mod_info.c mod_log_config.c
>                         mod_rewrite.c mod_speling.c mod_status.c
>                         mod_usertrack.c
>                src/os/netware ApacheCore.imp multithread.c os.c os.h
>                src/support htpasswd.c
>   Added:       src/lib/expat-lite xmlparse.imp xmlparsenw.def xmltok.imp
>                         xmltoknw.def
>                src/os/netware ApacheModuleTLS.def apache.xdc libpre.c
>                         libprews.c mod_tls.c
>   Removed:     src/support htdigest.mcp.gz htpasswd.mcp.gz
>   Log:
>     Netware port updates to 1.3.13-dev
>   
>     Submitted by Mike Gardiner [<MG...@novell.com>]

FYI, I've just reviewed this checkin. Looks good, and has no effect on
non-Netware operation.

+1

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/