View Single Post
Old 06-11-2011, 01:46 AM   PM User | #1
rotezecke
New Coder

 
Join Date: Sep 2010
Posts: 20
Thanks: 3
Thanked 1 Time in 1 Post
rotezecke is an unknown quantity at this point
script works with -w switch but not without

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";

Last edited by rotezecke; 06-11-2011 at 08:35 AM.. Reason: found the fix
rotezecke is offline   Reply With Quote