#!/usr/bin/perl ####################################### # # TEMPLATE PERL CGI PROGRAM... # # Author: Matthew W. Coan # Date: Mon Aug 18 13:14:50 EDT 2014 # ####################################### #use strict; use warnings; # # global variables # $log_file_name = "/home/mcoan/perl/myprog_log.txt"; $admin_email = "mcoan"; $webmaster = "mcoan"; $do_user_email = 0; $do_admin_email = 0; # # hex string to char string # sub x2c { my $str = $_[0]; $str =~ s/\+/ /g; $str =~ s/%([0-9A-Fa-f]{2})/chr hex $1/eg; return $str; } # # parse cgi parameters # sub parse_cgi_data { my $qs = $_[0]; @array = split(/\&/, $qs); %param_map = (); for($i = 0; $i < @array; $i++) { $str = $array[$i]; @param = split(/\=/, $str); $name = $param[0]; $value = $param[1]; $name = &x2c($name); $value = &x2c($value); $param_map{$name} = $value; } return $param_map; } # # show error page # sub show_error_page { my $message = $_[0]; print < Error...


$message




END_PAGE } # # show success page # sub show_page { my $name = $_[0]; print < Hello, $name


Hello, $name




GET request method:
Please enter your name:
Please enter your email:



POST request method:
Please enter your name:
Please enter your email:



END_PAGE } # # parse the CGI request # sub parse_cgi { $method = $ENV{REQUEST_METHOD}; %param_map = (); if($method eq "GET") { $query_string = $ENV{QUERY_STRING}; $param_map = &parse_cgi_data($query_string); } elsif($method eq "POST") { $content_length = $ENV{CONTENT_LENGTH}; read STDIN, $buffer, $content_length; $param_map = &parse_cgi_data($buffer); } return $param_map; } # # log data # sub log_data { my $name = $_[0]; my $email = $_[1]; open(LOG, ">>$log_file_name") or &cgi_die("Unable to log data...\n"); $now = `date`; chomp $now; print LOG "\"" . $email . "\",\"" . $name . "\",\"" . $now . "\",\"\"\n"; close(LOG); } sub send_admin_email { my $email = $_[0]; my $name = $_[1]; open(EMAIL, "|/usr/sbin/sendmail -t") or &cgi_die("Unable to send admin email...\n"); print EMAIL "To: $email\n"; print EMAIL "From: $webmaster\n"; print EMAIL "Subject: Form submitted...\n\n"; print EMAIL "Form submitted...\n"; print EMAIL "Name: $name\n"; print EMAIL "Email: $email\n"; close(EMAIL); } sub send_user_email { my $email = $_[0]; open(EMAIL, "|/usr/sbin/sendmail -t") or &cgi_die("Unable to send user email...\n"); print EMAIL "To: $email\n"; print EMAIL "From: $webmaster\n"; print EMAIL "Subject: Thank you...\n\n"; print EMAIL "Thank you...\n"; close(EMAIL); } sub error_check { my $param_map = $_[0]; my $name = $param_map{"name"}; my $email = $param_map{"email"}; if($email eq "" || $name eq "" || !($email =~ m/\@/)) { return 0; } return 1; } sub cgi_die { my $message = $_[0]; &show_error_page($message); exit(0); } # # script main # print("Conent-type: text/html\r\n\r\n"); $param_map = parse_cgi(); if(&error_check($param_map)) { $name = $param_map{"name"}; $email = $param_map{"email"}; if($name eq "") { $name = "World"; } &log_data($name, $email); if($do_admin_email) { &send_admin_email($admin_email, $name); } if($do_user_email) { &send_user_email($email); } &show_page($name); exit(0); } elsif(!$ENV{"name"} && !$ENV{"email"}) { &show_page("world"); exit(0); } else { &show_error_page("Error found in your form data..."); exit(0); }