this script works on localhost with the -w switch but not without. it also works when use strict and use warning are active.
apache2/error.log:
without switch (aborted script):
(2)No such file or directory: exec of ... failed
with the switch i get:
Use of uninitialized value $email_flag in string ne ...
which looks initialised to me.
on the life web server neither one works. perl is new to me, but i know some BASH and PHP.
i run debian lenny, apache2, perl 5.10.
Code:
#!/usr/bin/perl -w
#works with the next two lines enabled
#use strict;
#use warnings;
##clear output
$| = 1;
# Define these bits
my $mailprog = '/usr/sbin/sendmail'; # where the mail program lives
# $webpage = '/'; # default web page to return to .. hidden in form element webpage
my $to = "not\@for.you"; # where the mail is sent
my ($command,$email,@pairs,$buffer,$pair,$email_flag) ;
##!! print "Content-Type: text/html\n\n";
# get the data from the form
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
# Split the name-value pairs
@pairs = split(/&/, $buffer);
foreach $pair (@pairs) {
# Split the pair up into individual variables. #
my($name, $value) = split(/=/, $pair);
# Decode the form encoding on the name and value variables. #
$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;
# If they try to include server side includes, erase them, so they
# aren't a security risk if the html gets returned. Another
# security hole plugged up.
$value =~ s/<!--(.|\n)*-->//g;
## print "Name of form element is $name with value of $value \n";
if ($name eq 'email') {
$email = $value;
}
if ($name eq 'command') {
$command = $value;
}
}
# end of extracting variables from form
# Do a little email checking
if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/ ||
$email !~ /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/ ) {
$email_flag = "ERROR";
# $why_error = "Email";
}
my $urlcommand = $command;
## Do a little command checking
if ($command eq 'Subscribe') {
$command = "SUBSCRIBE rpc-news";
}
if ($command eq 'Unsubscribe') {
$command = "UNSUBSCRIBE rpc-news";
}
if ($command eq 'Suspend') {
$command = "SET rpc-news NOMAIL";
}
if ($command eq 'Resume') {
$command = "SET rpc-news MAIL";
}
my $getInfo = '';
## Start page output
print "Content-Type: text/html\n";
# only mail if email address is ok
if ($email_flag ne "ERROR") {
# Open The Mail Program
open(MAIL,"|$mailprog -t");
print MAIL "To: $to\n";
print MAIL "From: $email\n";
print MAIL "Subject: [rpc-news] $command \n";
print MAIL "Reply-to: $email \n";
# print "X-RemoteIPaddress: $ENV{'REMOTE_ADDR'} \n";
print MAIL "$command \n";
print MAIL "EXIT \n";
close (MAIL);
# email is valid
$getInfo = "?result=good";
}
if ($email_flag eq "ERROR") {
$getInfo = "?result=bad";
}
## redirect to cms page
my $rootURL= $ENV{'SERVER_NAME'};
my $url = "http://${rootURL}/thank_you.html${getInfo}&action=${urlcommand}";
print "Location: $url\n\n";