igor3000
asked on
Need changes to this perl script
This cgi script is running now on my server
as you see it takes a password and delivers a .wav file
except right now the file comes up as text in the browser
i need the exact changes that would need to be made
to make the .wav file prompt the
user for a "save as" and and then allow for download
of the song??
exact detailed changes please!!!
I Need You To MAKE THE CHANGES IN THE SCRIPT AND REPRINT
THE CHANGE.... it's no use just telling me where
because i already tried that and always get "server error"
so please make the changes and REPRINT the script here
thanks
#!/usr/bin/perl
#
# WEB900.PL (Verifies web900 codes)
#
# - Original script and file locking 1/24/96 Bert Love
#
# - Modified the location of the challenge, good and bad HTML files for
# - security reasons. The $oordir variable is the out-of-reach directory.
# - 5/21/96 S. Thomas
#
#
# File locations
#
# oordir - Set this to the directory just out of reach of the web server
directory.
# - Conventionally, this is the directory just above public_html:
# /usr2
# /usr2/shane (this is oordir)
# /usr2/shane/public_html (this is the top of the HTTP dirs)
# /usr2/shane/public_html/cg i-bin
$oordir = '/usr/home/igor3000/webaut h';
$webfile = "/$oordir/web.data";
$formfile = "/$oordir/webchall.html";
$goodfile = "$oordir/song.ra";
$badfile = "$oordir/bad.html";
$logfile = "$oordir/web.log";
#
# You shouldn't need to touch anything below this line!
#
require "ctime.pl";
chop($date = &ctime(time));
$WEBLEN = 8; # fixed record length in webfile
# copy the values of these environment variables
$method = $ENV{"REQUEST_METHOD"};
$type = $ENV{"CONTENT_TYPE"};
# if the script was called with the GET method,
# output the form
if($method eq "GET") {
&send_file($formfile);
exit;
}
# check for the POST method and the HTML form's MIME-type
if($method ne "POST" || $type ne
"application/x-www-form-ur lencoded") {
&system_error("Web authorization code must come from a Form\n");
exit;
}
# read form data from standard input
%input_values = &break_input;
# convert from the strange URL syntax to normal ascii
# and translate non-UNIX line endings to UNIX convention
$number = &normalize_query($input_va lues{"numb er"});
$email = &normalize_query($input_va lues{"emai l"});
# verify number is seven digits
if(length($number) != 7) {
&system_error("Sorry, but that number is not valid\n");
exit;
}
# open Web file for read/write and lock
unless(open(WEB,"+<$webfil e")) {
&system_error("Could not open web data file.\n");
exit;
}
#flock(WEB, $LOCK_EX);
seek(WEB, 0, 0);
# open log file as append and lock
unless(open(WLOG,">>$logfi le")) {
# flock(WEB, $LOCK_UN);
&system_error("Could not open log file.\n");
exit;
}
#flock(WLOG, $LOCK_EX);
#seek(WLOG, 0, 2);
$goodbad=$badfile;
SEARCH:
for ($recnum = 0; read(WEB, $goodnum, $WEBLEN); $recnum++) {
$goodnum =~ tr/0-9//cd;
if($number eq $goodnum) { # got the number
$goodbad=$goodfile;
seek(WLOG, 0, 2); # make sure we're at end
print (WLOG $date, " ", $number, " ", $email, "\n");
seek(WEB, -$WEBLEN, 1);
$goodnum =~ tr/0-9/x/;
print WEB $goodnum;
last SEARCH;
}
seek(WEB, $recnum*$WEBLEN, 0);
}
# unlock and close files
#flock(WEB, $LOCK_UN);
#flock(WLOG, $LOCK_UN);
close(WEB);
close(WLOG);
chmod(0666, $logfile);
# send the good or bad news
&send_file($goodbad);
exit;
##
## SUBROUTINES
##
# read CONTENT_LENGTH bytes from the standard input and decode
# the URL format input, breaking it into an associative array
# of HTML variable names and their values.
sub break_input {
local ($i);
read(STDIN,$input,$ENV{'CO NTENT_LENG TH'});
@form_names = split('&',$input);
foreach $i(@form_names) {
($html_name,$html_value) = split('=',$i);
$input_values{$html_name} = $html_value;
}
return %input_values;
}
# handle system errors
sub system_error {
local($errmsg) = @_;
&print_header("System Error");
print $errmsg;
&print_footer;
}
# given a title, print the return header
sub print_header {
local($title) = @_;
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>$title</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<H1>$title</H1>\n";
}
# finish off HTML page
sub print_footer {
print "</BODY>\n";
print "</HTML>\n";
}
# URL syntax converts most non-alphanumeric characters into a
# percentage sign, followed by the character's value in hex.
sub normalize_query {
local($value) = @_;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9] )/pack("C" ,hex($1))/ eg;
return $value;
}
# send specified HTML file
sub send_file {
local($file) = @_;
unless(open(FILE,$file)) {
&system_error("Failed to open file $file\n");
exit;
}
print "Content-type: text/html\n\n";
while (<FILE>) {
print;
}
close(FILE);
}
as you see it takes a password and delivers a .wav file
except right now the file comes up as text in the browser
i need the exact changes that would need to be made
to make the .wav file prompt the
user for a "save as" and and then allow for download
of the song??
exact detailed changes please!!!
I Need You To MAKE THE CHANGES IN THE SCRIPT AND REPRINT
THE CHANGE.... it's no use just telling me where
because i already tried that and always get "server error"
so please make the changes and REPRINT the script here
thanks
#!/usr/bin/perl
#
# WEB900.PL (Verifies web900 codes)
#
# - Original script and file locking 1/24/96 Bert Love
#
# - Modified the location of the challenge, good and bad HTML files for
# - security reasons. The $oordir variable is the out-of-reach directory.
# - 5/21/96 S. Thomas
#
#
# File locations
#
# oordir - Set this to the directory just out of reach of the web server
directory.
# - Conventionally, this is the directory just above public_html:
# /usr2
# /usr2/shane (this is oordir)
# /usr2/shane/public_html (this is the top of the HTTP dirs)
# /usr2/shane/public_html/cg
$oordir = '/usr/home/igor3000/webaut
$webfile = "/$oordir/web.data";
$formfile = "/$oordir/webchall.html";
$goodfile = "$oordir/song.ra";
$badfile = "$oordir/bad.html";
$logfile = "$oordir/web.log";
#
# You shouldn't need to touch anything below this line!
#
require "ctime.pl";
chop($date = &ctime(time));
$WEBLEN = 8; # fixed record length in webfile
# copy the values of these environment variables
$method = $ENV{"REQUEST_METHOD"};
$type = $ENV{"CONTENT_TYPE"};
# if the script was called with the GET method,
# output the form
if($method eq "GET") {
&send_file($formfile);
exit;
}
# check for the POST method and the HTML form's MIME-type
if($method ne "POST" || $type ne
"application/x-www-form-ur
&system_error("Web authorization code must come from a Form\n");
exit;
}
# read form data from standard input
%input_values = &break_input;
# convert from the strange URL syntax to normal ascii
# and translate non-UNIX line endings to UNIX convention
$number = &normalize_query($input_va
$email = &normalize_query($input_va
# verify number is seven digits
if(length($number) != 7) {
&system_error("Sorry, but that number is not valid\n");
exit;
}
# open Web file for read/write and lock
unless(open(WEB,"+<$webfil
&system_error("Could not open web data file.\n");
exit;
}
#flock(WEB, $LOCK_EX);
seek(WEB, 0, 0);
# open log file as append and lock
unless(open(WLOG,">>$logfi
# flock(WEB, $LOCK_UN);
&system_error("Could not open log file.\n");
exit;
}
#flock(WLOG, $LOCK_EX);
#seek(WLOG, 0, 2);
$goodbad=$badfile;
SEARCH:
for ($recnum = 0; read(WEB, $goodnum, $WEBLEN); $recnum++) {
$goodnum =~ tr/0-9//cd;
if($number eq $goodnum) { # got the number
$goodbad=$goodfile;
seek(WLOG, 0, 2); # make sure we're at end
print (WLOG $date, " ", $number, " ", $email, "\n");
seek(WEB, -$WEBLEN, 1);
$goodnum =~ tr/0-9/x/;
print WEB $goodnum;
last SEARCH;
}
seek(WEB, $recnum*$WEBLEN, 0);
}
# unlock and close files
#flock(WEB, $LOCK_UN);
#flock(WLOG, $LOCK_UN);
close(WEB);
close(WLOG);
chmod(0666, $logfile);
# send the good or bad news
&send_file($goodbad);
exit;
##
## SUBROUTINES
##
# read CONTENT_LENGTH bytes from the standard input and decode
# the URL format input, breaking it into an associative array
# of HTML variable names and their values.
sub break_input {
local ($i);
read(STDIN,$input,$ENV{'CO
@form_names = split('&',$input);
foreach $i(@form_names) {
($html_name,$html_value) = split('=',$i);
$input_values{$html_name} = $html_value;
}
return %input_values;
}
# handle system errors
sub system_error {
local($errmsg) = @_;
&print_header("System Error");
print $errmsg;
&print_footer;
}
# given a title, print the return header
sub print_header {
local($title) = @_;
print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>$title</TITLE>\n";
print "</HEAD>\n";
print "<BODY>\n";
print "<H1>$title</H1>\n";
}
# finish off HTML page
sub print_footer {
print "</BODY>\n";
print "</HTML>\n";
}
# URL syntax converts most non-alphanumeric characters into a
# percentage sign, followed by the character's value in hex.
sub normalize_query {
local($value) = @_;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9]
return $value;
}
# send specified HTML file
sub send_file {
local($file) = @_;
unless(open(FILE,$file)) {
&system_error("Failed to open file $file\n");
exit;
}
print "Content-type: text/html\n\n";
while (<FILE>) {
print;
}
close(FILE);
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.