#!/usr/local/bin/perl
###########################################################################
# Program: guest.cgi
# Version: 2.0
# Revisions: 1.0 May ??, 1995
# 1.01 May 25, 1995--Added subject to mailing and introduced
# $Mailto.
# 1.02 June 02, 1995--Changed more fields to be variables
# Put 'em at top with comments for changing.
# Handle "blank" home page entries
# 2.0 June 9, 1995-- Dbm changes to work with new version of
# gbmaint (2.0). NEED gbmaint 2.0 TO WORK WITH THIS!!!
# (available at http://www.pobox.com/~mattl/src)
# Description: Perl cgi script to take user input and put it in a dbm.
# Requirements: perl (4 or 5), a webserver that allows user cgi
# Author: Matt Leonard
# mattl@pobox.com
# http://www.pobox.com/~mattl
# Comments:
# Copyright: This program is copyright 1995-1997 Matt Leonard.
# Tabstop: 3
###########################################################################
#
# variables
# many of these will need to be changed to work on your system
#
# Path_To_Dbm is the full path to the incoming dbm database (needs to
# be changed for other systems)
$Path_To_Dbm = "/home/leonarm/public_html/source/cgi/incoming";
$Perms = "undef";
# Mail_Prog is the path to the mail program you want to use to mail
# messages. (probably doesn't need changing if you're on UNIX)
$Mail_Prog = "/bin/mail";
# Mailto is the person who will get the mail messages when a person
# enters a guestbook record (DEFINITELY needs to be changed!)
$Mailto = "nobody\@nowhere.com";
# Subject is the subject line of a mail notification (change to suit
# your taste)
$Subject = "Someone entered a guestbook record";
# Msg_To_Usr is what the user will see as a "result of submission". This
# initial setting is what appears if everything goes well, otherwise it
# is reset later in the program. (change to suit, you'll at least want to
# change the "User" to someone else)
$Msg_To_User = "Your input has been entered into the \"incoming\" database and as soon as User gets around to it, it will be added to the guestbook. This typically takes a couple of days.";
# Resp_Title is the title of the response page. (change to suit)
$Resp_Title = "Guestbook Response";
# Resp_Head is the heading of the response page. (change to suit)
$Resp_Head = "OK, Got Your Input";
#
# begin program
#
# get user's input variables
%Uservars = &read_query_string;
# put the data into the dbm
if (dbmopen(%USERINFO, $Path_To_Dbm, $Perms)) {
# get rid of blank page entries that only have "http://"
if ($Uservars{'page'} eq "http:\/\/") {
$Uservars{'page'} = "";
} # if
# incoming dbm records' fields are "(" delimited
$Record = $Uservars{'email'} . "(" .
$Uservars{'page'} . "(" .
$Uservars{'comment'};
$USERINFO{$Uservars{'name'}} = $Record;
# mail notification to $Mailto
if (! open(MAIL, "| $Mail_Prog $Mailto")) {
$Msg_To_User = "Sorry, there's a problem with mail, try again later.";
delete $USERINFO{$Uservars{'name'}};
} else {
print MAIL "Subject: $Subject\n";
print MAIL "\nPerson: $Uservars{'name'}\n";
print MAIL "Entered a guestbook record\n";
} # else
dbmclose(%USERINFO);
close (MAIL);
} else {
$Msg_To_User = "Sorry, there's a problem with the \"incoming\" database, try again later.";
} # else
# build html response page
&Html_Header($Resp_Title, $Resp_Head);
if ($Uservars{'name'}) {
print "
YOU:
$Uservars{'name'}
"; # close printing to html response
} # if
if ($Uservars{'email'}) {
print "
YOUR ADDRESS:
$Uservars{'email'}
"; # close printing to html response
} # if
if ($Uservars{'page'}) {
print "
YOUR PAGE:
$Uservars{'page'}
"; # close printing to html response
} # if
if ($Uservars{'comment'}) {
print "
YOUR COMMENTS:
$Uservars{'comment'}
"; # close printing to html response
} # if
print "
RESULTS OF SUBMISSION:
$Msg_To_User
\n"; } # Html_Header sub Html_Trailer { print "\n"; print "\n"; } # Html_Trailer # this subroutine is lifted directly out of the Leeds CGI tutorial. # http://agora.leeds.ac.uk/nik/Cgi/start.html # It is very similar to the code in the cgi-lib.pl stuff sub read_query_string { local ($buffer, @pairs, $pair, $name, $value, %FORM); # Read in text $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { # this is a "GET method $buffer = $ENV{'QUERY_STRING'}; } # else @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(..)/pack("C", hex($1))/eg; $FORM{$name} = $value; } # foreach %FORM; }