# slash, which is not worked around here. This bug should be fixed in
# Apache 2.0.55 and later.
# Some servers provide $0 as a complete path rather than just the filename,
# so extract the filename.
$ENV{SCRIPT_NAME}=~ s#^/?#/# ;
if ($ENV{SERVER_SOFTWARE}=~ /^Apache\b/i) {
my($zero)= $0=~ m#([^/]*)$# ;
($ENV{SCRIPT_NAME})= $ENV{SCRIPT_NAME}=~ /^(.*?\Q$zero\E)/ if $zero ne '' ;
}
$ENV_SERVER_PORT= $ENV{SERVER_PORT} ;
$ENV_SCRIPT_NAME= $ENV{SCRIPT_NAME} ;
# Next, adjust config variables as needed, or create any needed constants from
# them.
# Create @BANNED_NETWORK_ADDRS from @BANNED_NETWORKS.
# No error checking; assumes the proxy owner set @BANNED_NETWORKS correctly.
@BANNED_NETWORK_ADDRS= () ;
for (@BANNED_NETWORKS) {
push(@BANNED_NETWORK_ADDRS, pack('C*', /(\d+)/g)) ;
}
# For the external tests, create hashes of parsed URLs if the tests are CGI calls.
# Note that the socket names must each be unique!
@{$USER_IP_ADDRESS_TEST_H}{qw(host port path socket open)}=
(lc($1), ($2 eq '' ? 80 : $2), $3, 'S_USERTEST', 0)
if ($USER_IP_ADDRESS_TEST=~ m#http://([^/?:]*):?(\d*)(.*)#i) ;
@{$DESTINATION_SERVER_TEST_H}{qw(host port path socket open)}=
(lc($1), ($2 eq '' ? 80 : $2), $3, 'S_DESTTEST', 0)
if ($DESTINATION_SERVER_TEST=~ m#http://([^/?:]*):?(\d*)(.*)#i) ;
# If $RUNNING_ON_SSL_SERVER is '', then guess based on SERVER_PORT.
$RUNNING_ON_SSL_SERVER= ($ENV_SERVER_PORT==443) if $RUNNING_ON_SSL_SERVER eq '' ;
# Set this constant based on whether the server is IIS, because we have to
# test it later for every run to work around a bug in IIS. A constant here
# saves time when using mod_perl.
$RUNNING_ON_IIS= ($ENV{'SERVER_SOFTWARE'}=~ /IIS/) ;
# Create @NO_PROXY from $NO_PROXY for efficiency.
@NO_PROXY= split(/\s*,\s*/, $NO_PROXY) ;
# Base64-encode $PROXY_AUTH and $SSL_PROXY_AUTH if they're not encoded already.
$PROXY_AUTH= &base64($PROXY_AUTH) if $PROXY_AUTH=~ /:/ ;
$SSL_PROXY_AUTH= &base64($SSL_PROXY_AUTH) if $SSL_PROXY_AUTH=~ /:/ ;
# Guarantee URLs in @PROXY_GROUP have no trailing slash.
foreach (@PROXY_GROUP) { s#/$## }
# Create $NO_CACHE_HEADERS depending on $MINIMIZE_CACHING setting; it is placed
# in every response. Note that in all the "here documents" we use for error
# messages, it has to go on the same line as another header to avoid a blank
# line in the response.
$NO_CACHE_HEADERS= $MINIMIZE_CACHING
? "Cache-Control: no-cache\015\012Pragma: no-cache\015\012"
: '' ;
# Canonicalize all MIME types to lowercase.
for (@SCRIPT_MIME_TYPES) { $_= lc }
for (@OTHER_TYPES_TO_REGISTER) { $_= lc }
# Create @ALL_TYPES and %MIME_TYPE_ID, which are inverses of each other.
# This is useful e.g. to identify the MIME type expected in a given download,
# in a one-character flag. That's why we limit this to 64 types for now.
# $ALL_TYPES[0] is '', so we can test e.g. "if $MIME_TYPE_ID{$id} ..." .
@ALL_TYPES= ('', @SCRIPT_MIME_TYPES, @OTHER_TYPES_TO_REGISTER) ;
&HTMLdie("Too many MIME types to register.") if @ALL_TYPES > 64 ;
@MIME_TYPE_ID{@ALL_TYPES}= 0..$#ALL_TYPES ;
# Regex that matches a script MIME type.
$SCRIPT_TYPE_REGEX= '(' . join("|", @SCRIPT_MIME_TYPES) . ')' ;
# Regex that tells us whether we handle a given MIME type.
$TYPES_TO_HANDLE_REGEX= '(' . join("|", @TYPES_TO_HANDLE) . ')' ;
# Set $THIS_HOST to the best guess how this script was called-- use the
# Host: request header if available; otherwise, use SERVER_NAME.
# We don't bother with a $THIS_PORT, since it's more reliably set to the port
# through which the script was called. SERVER_NAME is much more likely to
# be different from the hostname that the user sees, since one server may
# handle many domains or have many hostnames.
if ($ENV{'HTTP_HOST'} ne '') {
($THIS_HOST)= $ENV{'HTTP_HOST'}=~ m#^(?:[\w+.-]+://)?([^:/?]*)# ;
$THIS_HOST= $ENV{'SERVER_NAME'} if $THIS_HOST eq '' ;
} else {
$THIS_HOST= $ENV{'SERVER_NAME'} ;
}
=13= |