version 1.3, 2002/10/30 14:25:33
|
version 1.7, 2003/05/02 21:03:19
|
Line 1
|
Line 1
|
#!/usr/bin/perl |
#!/usr/bin/perl |
# $Id$ |
# $Id$ |
|
|
$VERSION = "1.3.2 (Demonic/Linux/LON-CAPA Derivative)"; |
$VERSION = "1.3.2 (Demonic/Linux/LON-CAPA Derivative $Revison$)"; |
|
|
# HTTPi Hypertext Tiny Truncated Process Implementation |
# HTTPi Hypertext Tiny Truncated Process Implementation |
# Copyright 1999-2001 Cameron Kaiser # All rights reserved |
# Copyright 1999-2001 Cameron Kaiser # All rights reserved |
Line 10 $VERSION = "1.3.2 (Demonic/Linux/LON-CAP
|
Line 10 $VERSION = "1.3.2 (Demonic/Linux/LON-CAP
|
# LON-CAPA: find httpi license and readme at CVS loncom/license |
# LON-CAPA: find httpi license and readme at CVS loncom/license |
# |
# |
|
|
|
use lib '/home/httpd/lib/perl/'; |
|
use LONCAPA::Configuration(); |
|
%loncapavar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')}; |
|
$port_to_use=$loncapavar{'lonhttpdPort'}; |
|
if (!defined($port_to_use)) { |
|
$port_to_use='8080'; |
|
} |
|
|
|
# The main server is running on 80, so exit in this case |
|
if ($port_to_use eq '80') { die('Apache is already on Port 80'); } |
|
|
%system_content_types = |
%system_content_types = |
("html" => "text/html", |
("html" => "text/html", |
"htm" => "text/html", |
"htm" => "text/html", |
Line 183 open (PIDSAVE,">$pidfile");
|
Line 194 open (PIDSAVE,">$pidfile");
|
print PIDSAVE "$$\n"; |
print PIDSAVE "$$\n"; |
close(PIDSAVE); |
close(PIDSAVE); |
|
|
$0 = "dhttpi: binding port ..."; |
$0 = "lonhttpd: (dhttpi) binding port ..."; |
$bindthis = pack($sockaddr, 2, 8080, pack('l', chr(0).chr(0).chr(0).chr(0))); |
$bindthis = pack($sockaddr, 2, $port_to_use, |
|
pack('l', chr(0).chr(0).chr(0).chr(0))); |
socket(S, 2, 1, 6); |
socket(S, 2, 1, 6); |
setsockopt(S, 1, 2, 1); |
setsockopt(S, 1, 2, 1); |
bind(S, $bindthis) || die("$0: while binding port 8080:\n\"$!\"\n"); |
bind(S, $bindthis) || die("$0: while binding port $port_to_use:\n\"$!\"\n"); |
listen(S, 128); |
listen(S, 128); |
$0 = "dhttpi: connected and waiting ANY:8080"; |
$0 = "lonhttpd: (dhttpi) connected and waiting ANY:$port_to_use"; |
|
|
$statiosuptime = time(); |
$statiosuptime = time(); |
|
|
Line 267 $SIG{'__DIE__'} = \&dead;
|
Line 279 $SIG{'__DIE__'} = \&dead;
|
$SIG{'ALRM'} = $SIG{'TERM'} = $SIG{'INT'} = \&bye; |
$SIG{'ALRM'} = $SIG{'TERM'} = $SIG{'INT'} = \&bye; |
|
|
sub master { |
sub master { |
$0 = "dhttpi: handling request"; |
$0 = "lonhttpd: (dhttpi) handling request"; |
# $sock = getpeername(STDIN); |
# $sock = getpeername(STDIN); |
$rfcdate = scalar gmtime; |
$rfcdate = scalar gmtime; |
($dow, $mon, $dt, $tm, $yr) = ($rfcdate =~ |
($dow, $mon, $dt, $tm, $yr) = ($rfcdate =~ |
Line 337 while (<STDIN>) {
|
Line 349 while (<STDIN>) {
|
# |
# |
# Heavily customized for LON-CAPA |
# Heavily customized for LON-CAPA |
# |
# |
|
$address=~s/\/+/\//g; |
unless ($address=~/^\/(status|adm\/|res\/adm\/)/) { $fail=1; } |
unless ($address=~/^\/(status|adm\/|res\/adm\/)/) { $fail=1; } |
# |
# |
# because existing restriction matrix would not do precedence across rules |
# because existing restriction matrix would not do precedence across rules |
Line 361 while (<STDIN>) {
|
Line 374 while (<STDIN>) {
|
if ($fail) { |
if ($fail) { |
&htsponse(403, "Forbidden"); |
&htsponse(403, "Forbidden"); |
if ($fail == 1) { |
if ($fail == 1) { |
&hterror("Forbidden (Client Disallowed)", <<"EOF"); |
&hterror("Wrong URL", <<"EOF"); |
Your network address (<i>$ip</i>) is not allowed to access this resource. |
You might want to remove the "<tt>:$port_to_use</tt>" from the web page address (URL). |
EOF |
EOF |
&log; exit; |
&log; exit; |
} else { |
} else { |
Line 425 EOF
|
Line 438 EOF
|
<html> |
<html> |
<head> |
<head> |
<title> |
<title> |
HTTPi Status |
LonHTTPD (HTTPi) Status |
</title> |
</title> |
</head> |
</head> |
<body bgcolor = "#ffffff" text = "#000000" vlink = "#0000ff" link = "#0000ff"> |
<body bgcolor = "#ffffff" text = "#000000" vlink = "#0000ff" link = "#0000ff"> |
<h1>HTTPi Server Status (<code>$VERSION</code>)</h1> |
<h1>LonHTTPD (HTTPi) Server Status (<code>$VERSION</code>)</h1> |
<h3>lonhttpd on port 8080</h3> |
<h3>lonhttpd on port $port_to_use</h3> |
<b>Started at:</b> $suptime<br> |
<b>Started at:</b> $suptime<br> |
<b>Uptime:</b> $d days, $h:$m:$s<br> |
<b>Uptime:</b> $d days, $h:$m:$s<br> |
<b>Last request time:</b> $statiosltr<p> |
<b>Last request time:</b> $statiosltr<p> |
Line 477 EOF
|
Line 490 EOF
|
$ENV{'SERVER_NAME'} = "localhost"; |
$ENV{'SERVER_NAME'} = "localhost"; |
$ENV{'SERVER_PROTOCOL'} = "HTTP/$httpver"; |
$ENV{'SERVER_PROTOCOL'} = "HTTP/$httpver"; |
$ENV{'SERVER_SOFTWARE'} = "HTTPi/$VERSION"; |
$ENV{'SERVER_SOFTWARE'} = "HTTPi/$VERSION"; |
$ENV{'SERVER_PORT'} = "8080"; |
$ENV{'SERVER_PORT'} = "$port_to_use"; |
$ENV{'SERVER_URL'} = "http://localhost:8080/"; |
$ENV{'SERVER_URL'} = "http://localhost:$port_to_use/"; |
$ENV{'SCRIPT_FILENAME'} = $raddress; |
$ENV{'SCRIPT_FILENAME'} = $raddress; |
$ENV{'SCRIPT_NAME'} = $address; |
$ENV{'SCRIPT_NAME'} = $address; |
$ENV{'REMOTE_HOST'} = $hostname; |
$ENV{'REMOTE_HOST'} = $hostname; |
Line 570 for (;;) {
|
Line 583 for (;;) {
|
$statiosltr = scalar localtime; |
$statiosltr = scalar localtime; |
$statiosreq++; |
$statiosreq++; |
if ($pid = fork()) { |
if ($pid = fork()) { |
$0 = "dhttpi: waiting for child process"; |
$0 = "lonhttpd: (dhttpi) waiting for child process"; |
waitpid($pid, 0); |
waitpid($pid, 0); |
$0 = "dhttpi: on ANY:8080, last request " . |
$0 = "lonhttpd: (dhttpi) on ANY:$port_to_use, last request " . |
scalar localtime; |
scalar localtime; |
} else { |
} else { |
$0 = "dhttpi: child switching to socket"; |
$0 = "lonhttpd: (dhttpi) child switching to socket"; |
open(STDIN, "<&NS"); |
open(STDIN, "<&NS"); |
open(STDOUT, ">&NS"); |
open(STDOUT, ">&NS"); |
&master; |
&master; |