#!/usr/bin/perl
#
#
#
#
# 25.11.1998 WE Linux-Download eingebaut
# last update 12.10.1998 kk
#
# getting arguments, must bee at first for correct settings and librarys !
%query = &parse_form;
#
# Required Librariers
# --------------------------------------------------------
eval {
# settings first !
require ("./settings.download");
# einige h„ufig verwendete Funktionen
require ("./dl-lib.pl");
# Konfiguration der Registrierungs-DB
require ("./admin/db.cfg");
# Lesen und Schreiben in Registrierungs-DB
require ("./db-lib.pl");
};
if ($@) { &cgierr ("Error in libraries. Check that they exist, permissions are set correctly and that they compile. Reason: $@"); }
$| = 1; # Flush Output Right Away
eval { &main; }; # Trap any fatal errors so the program hopefully
if ($@) { &cgierr("fatal error: $@"); } # never produces that nasty 500 server error page.
exit; # There are only two exit calls in the script, here and in in &cgierr.
sub main {
$page_is_out = 0;
$param="";
if ($query{'v'}) {
$v=$query{'v'};
if ($v ne "m") { &check_referer; }
$bs=$query{'bs'};
$pro=$query{'pro'};
$param="ok";
if ($v eq "m" || $v eq "reg_ok") {
if ($bs eq "win") {
if ($pro eq "base3") {
# iss-base 3.0
require ("." . $lang_ref . "/dl_iss3-win.pl");
}
else {
# iss-base 4.0
require ("." . $lang_ref . "/dl_iss4-win.pl");
}
}
else {
$bs="lnx";
if ($pro eq "base3") {
# iss-base 3.0
require ("." . $lang_ref . "/dl_iss3-lnx.pl");
}
else {
# iss-base 4.0
require ("." . $lang_ref . "/dl_iss4-lnx.pl");
}
}
}
elsif ($v eq "txt") {
# erst registrieren, dann downloaden
require ("." . $lang_ref . "/reg_hinweis.pl");
}
elsif ($v eq "reg_hin") {
# Registrierungsseite
require ("." . $lang_ref . "/form_download.pl");
}
elsif ($v eq "h") {
# Haftungsseite und echte Links
if ($pro eq "base3" ) {
# iss-base 3.0 z.Z. nur bei Oberberg
$forward_ref = $alt_germany;
}
else {
$forward_ref = "";
}
require ("." . $lang_ref . "/reg_haftung.pl");
}
elsif ($v eq "reg") {
if ($query{'reg_aktion'}) {
$reg_aktion = $query{'reg_aktion'};
if ($reg_aktion eq $submit_ok) {
$email = $query{'email'};
$pruef="ok";
&check_email_addr;
&check_required;
if ($pruef ne "ok") {
&check_registered;
}
if ($pruef eq "ok") {
&db_anmeldung;
&form_mailcode;
$page_is_out = 1;
}
else {
$v="txt";
&html_print_headers;
if ($email_ok eq "notOk") {
&email_err;
}
else {
&fields_err;
}
require ("." . $lang_ref . "/form_download.pl");
}
}
else {
#/*reg_aktion=verwerfen*/;
&form_dl_init;
require ("." . $lang_ref . "/form_download.pl");
} # /* reg_aktion */
} # /* isset $reg_aktion */
}
else {
# nicht aus unserem Skript referenziert
&cgierr("This command is not allowed here !");
}
if ($page_is_out == 0) {
&html_print_headers;
# die oben geladene Seite ausgeben
&html_page_out;
}
}
else {
&cgierr("Command not valid !");
}
}
exit;
sub parse_form {
# --------------------------------------------------------
# Parses the form input and returns a hash with all the name
# value pairs. Removes SSI and any field with "---" as a value
# (as this denotes an empty SELECT field.
my (@pairs, %in);
my ($buffer, $pair, $name, $value);
if ($ENV{'REQUEST_METHOD'} eq 'GET') {
@pairs = split(/&/, $ENV{'QUERY_STRING'});
}
elsif ($ENV{'REQUEST_METHOD'} eq 'POST') {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
@pairs = split(/&/, $buffer);
}
else {
&cgierr('error in parse_form. reason: unkown request_method.');
}
PAIR: foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s///g;
if ($value eq "---") { next PAIR; }
$in{$name} = $value;
}
return %in;
}
sub query_out {
# ---------------------------------------------
# parse give query string and build new query string where locals
# overwrite globals
#
my (@pairs, %in);
my ($mbs,$mv,$mmy_lang,$mpro,$mmirror,$buffer, $pair, $name, $value);
@pairs = split(/&/, $_[0]);
#print $_[0] . "
";
PAIR: foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$in{$name} = $value;
#print $name . "xxx" . $value;
}
if ( $in{'bs'} ) {
$mbs=$in{'bs'};
} else {
$mbs=$bs;
}
if ( $in{'v'} ) {
$mv=$in{'v'};
} else {
$mv=$v;
}
if ( $in{'pro'} ) {
$mpro=$in{'pro'};
} else {
$mpro=$pro;
}
if ( $in{'may_lang'} ) {
$mmay_lang=$in{'may_lang'};
} else {
$mmy_lang=$my_lang;
}
if ( $in{'mirror'} ) {
$mmirror=$in{'mirror'};
} else {
$mmirror=$mirror;
}
print qq?bs=$mbs&my_lang=$mmy_lang&v=$mv&pro=$mpro&mirror=$mmirror;
}
sub check_referer {
# Dont allow users to use download script from other then our site
local($check_referer) = 0;
if ($ENV{'HTTP_REFERER'}) {
foreach $referer (@referers) {
if ($ENV{'HTTP_REFERER'} =~ m|https?://([^/]*)$referer|i) {
$check_referer = 1;
last;
}
}
}
#else {
# $check_referer = 1;
#}
if ($check_referer != 1) { &cgierr('Refering not allowed from this site') }
}
sub cgierr {
# --------------------------------------------------------
# Displays any errors and prints out FORM and ENVIRONMENT
# information. Useful for debugging.
if ($query{'mirror'} eq 'debug') {
if (!$html_headers_printed) {
print "Content-type: text/plain\n\n";
$html_headers_printed = 1;
}
print "
\nCGI Error: $!\n";
print "Message: $_[0]\n\n";
print "_________Form Variables __________\n";
foreach $key (sort keys %in) {
print "$key: \t$in{$key}\n";
}
print "\n_________Environment Variables__________\n";
foreach $env (sort keys %ENV) {
print "$env: \t$ENV{$env}\n";
}
print "\n";
}
else
{
if (!$html_headers_printed) {
print "Content-type: text/html\n\n";
$html_headers_printed = 1;
}
print qq
$_[0]
Please send me an e-mail webmaster\@halstenbach.de ; } exit; }