#!/usr/bin/perl ############################################################################## # Guestbook Version 2.3.1 # # Copyright 1996 Matt Wright mattw@scriptarchive.com # # Created 4/21/95 Last Modified 10/29/95 # # Scripts Archive at: http://www.scriptarchive.com/ # ############################################################################## # COPYRIGHT NOTICE # # Copyright 1996 Matthew M. Wright All Rights Reserved. # # # # Guestbook may be used and modified free of charge by anyone so long as # # this copyright notice and the comments above remain intact. By using this # # code you agree to indemnify Matthew M. Wright from any liability that # # might arise from it's use. # # # # Selling the code for this program without prior written consent is # # expressly forbidden. In other words, please ask first before you try and # # make money off of my program. # # # # Obtain permission before redistributing this software over the Internet or # # in any other medium. In all cases copyright and header must remain intact.# ############################################################################## # Set Variables $guestbookurl = "http://your.host.com/~yourname/guestbook.html"; $guestbookreal = "/home/yourname/public_html/guestbook.html"; $guestlog = "/home/yourname/public_html/guestlog.html"; $cgiurl = "http://your.host.com/cgi-bin/guestbook.pl"; $date_command = "/usr/bin/date"; # Set Your Options: $mail = 0; # 1 = Yes; 0 = No $uselog = 1; # 1 = Yes; 0 = No $linkmail = 1; # 1 = Yes; 0 = No $separator = 1; # 1 =
; 0 =

$redirection = 0; # 1 = Yes; 0 = No $entry_order = 1; # 1 = Newest entries added first; # 0 = Newest Entries added last. $remote_mail = 0; # 1 = Yes; 0 = No $allow_html = 1; # 1 = Yes; 0 = No $line_breaks = 0; # 1 = Yes; 0 = No # If you answered 1 to $mail or $remote_mail you will need to fill out # these variables below: $mailprog = '/usr/lib/sendmail'; $recipient = 'you@your.com'; # Done ############################################################################## # Get the Date for Entry $date = `$date_command +"%A, %B %d, %Y at %T (%Z)"`; chop($date); $shortdate = `$date_command +"%D %T %Z"`; chop($shortdate); # Get the input read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); # Split the name-value pairs @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); # Un-Webify plus signs and %-encoding $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ s///g; if ($allow_html != 1) { $value =~ s/<([^>]|\n)*>//g; } $FORM{$name} = $value; } # Print the Blank Response Subroutines &no_comments unless $FORM{'comments'}; &no_name unless $FORM{'realname'}; # Begin the Editing of the Guestbook File open (FILE,"$guestbookreal") || die "Can't Open $guestbookreal: $!\n"; @LINES=; close(FILE); $SIZE=@LINES; # Open Link File to Output open (GUEST,">$guestbookreal") || die "Can't Open $guestbookreal: $!\n"; for ($i=0;$i<=$SIZE;$i++) { $_=$LINES[$i]; if (//) { if ($entry_order eq '1') { print GUEST "\n"; } if ($line_breaks == 1) { $FORM{'comments'} =~ s/\cM\n/
\n/g; } print GUEST "$FORM{'comments'}
\n"; if ($FORM{'url'}) { print GUEST "$FORM{'realname'}"; } else { print GUEST "$FORM{'realname'}"; } if ( $FORM{'username'} ){ if ($linkmail eq '1') { print GUEST " \<"; print GUEST "$FORM{'username'}\>"; } else { print GUEST " <$FORM{'username'}>"; } } print GUEST "
\n"; if ( $FORM{'city'} ){ print GUEST "$FORM{'city'},"; } if ( $FORM{'state'} ){ print GUEST " $FORM{'state'}"; } if ( $FORM{'country'} ){ print GUEST " $FORM{'country'}"; } if ($separator eq '1') { print GUEST " - $date


\n\n"; } else { print GUEST " - $date

\n\n"; } if ($entry_order eq '0') { print GUEST "\n"; } } else { print GUEST $_; } } close (GUEST); # Log The Entry if ($uselog eq '1') { &log('entry'); } ######### # Options # Mail Option if ($mail eq '1') { open (MAIL, "|$mailprog $recipient") || die "Can't open $mailprog!\n"; print MAIL "Reply-to: $FORM{'username'} ($FORM{'realname'})\n"; print MAIL "From: $FORM{'username'} ($FORM{'realname'})\n"; print MAIL "Subject: Entry to Guestbook\n\n"; print MAIL "You have a new entry in your guestbook:\n\n"; print MAIL "------------------------------------------------------\n"; print MAIL "$FORM{'comments'}\n"; print MAIL "$FORM{'realname'}"; if ( $FORM{'username'} ){ print MAIL " <$FORM{'username'}>"; } print MAIL "\n"; if ( $FORM{'city'} ){ print MAIL "$FORM{'city'},"; } if ( $FORM{'state'} ){ print MAIL " $FORM{'state'}"; } if ( $FORM{'country'} ){ print MAIL " $FORM{'country'}"; } print MAIL " - $date\n"; print MAIL "------------------------------------------------------\n"; close (MAIL); } if ($remote_mail eq '1' && $FORM{'username'}) { open (MAIL, "|$mailprog -t") || die "Can't open $mailprog!\n"; print MAIL "To: $FORM{'username'}\n"; print MAIL "From: $recipient\n"; print MAIL "Subject: Entry to Guestbook\n\n"; print MAIL "Thank you for adding to my guestbook.\n\n"; print MAIL "------------------------------------------------------\n"; print MAIL "$FORM{'comments'}\n"; print MAIL "$FORM{'realname'}"; if ( $FORM{'username'} ){ print MAIL " <$FORM{'username'}>"; } print MAIL "\n"; if ( $FORM{'city'} ){ print MAIL "$FORM{'city'},"; } if ( $FORM{'state'} ){ print MAIL " $FORM{'state'}"; } if ( $FORM{'country'} ){ print MAIL " $FORM{'country'}"; } print MAIL " - $date\n"; print MAIL "------------------------------------------------------\n"; close (MAIL); } # Print Out Initial Output Location Heading if ($redirection eq '1') { print "Location: $guestbookurl\n\n"; } else { &no_redirection; } ####################### # Subroutines sub no_comments { print "Content-type: text/html\n\n"; print "No Comments\n"; print "

Your Comments appear to be blank

\n"; print "The comment section in the guestbook fillout form appears\n"; print "to be blank and therefore the Guestbook Addition was not\n"; print "added. Please enter your comments below.

\n"; print "

\n"; print "Your Name:
\n"; print "E-Mail:
\n"; print "City: , State: Country:

\n"; print "Comments:
\n"; print "

\n"; print " *


\n"; print "Return to the Guestbook."; print "\n\n"; # Log The Error if ($uselog eq '1') { &log('no_comments'); } exit; } sub no_name { print "Content-type: text/html\n\n"; print "No Name\n"; print "

Your Name appears to be blank

\n"; print "The Name Section in the guestbook fillout form appears to\n"; print "be blank and therefore your entry to the guestbook was not\n"; print "added. Please add your name in the blank below.

\n"; print "

\n"; print "Your Name:
\n"; print "E-Mail:
\n"; print "City: , State: Country:

\n"; print "Comments have been retained.

\n"; print "\n"; print " *


\n"; print "Return to the Guestbook."; print "\n\n"; # Log The Error if ($uselog eq '1') { &log('no_name'); } exit; } # Log the Entry or Error sub log { $log_type = $_[0]; open (LOG, ">>$guestlog"); if ($log_type eq 'entry') { print LOG "$ENV{'REMOTE_HOST'} - [$shortdate]
\n"; } elsif ($log_type eq 'no_name') { print LOG "$ENV{'REMOTE_HOST'} - [$shortdate] - ERR: No Name
\n"; } elsif ($log_type eq 'no_comments') { print LOG "$ENV{'REMOTE_HOST'} - [$shortdate] - ERR: No "; print LOG "Comments
\n"; } } # Redirection Option sub no_redirection { # Print Beginning of HTML print "Content-Type: text/html\n\n"; print "Thank You\n"; print "

Thank You For Signing The Guestbook

\n"; # Print Response print "Thank you for filling in the guestbook. Your entry has\n"; print "been added to the guestbook.
\n"; print "Here is what you submitted:

\n"; print "$FORM{'comments'}
\n"; if ($FORM{'url'}) { print "$FORM{'realname'}"; } else { print "$FORM{'realname'}"; } if ( $FORM{'username'} ){ if ($linkmail eq '1') { print " <"; print "$FORM{'username'}>"; } else { print " <$FORM{'username'}>"; } } print "
\n"; if ( $FORM{'city'} ){ print "$FORM{'city'},"; } if ( $FORM{'state'} ){ print " $FORM{'state'}"; } if ( $FORM{'country'} ){ print " $FORM{'country'}"; } print " - $date

\n"; # Print End of HTML print "


\n"; print "Back to the Guestbook\n"; print "- You may need to reload it when you get there to see your\n"; print "entry.\n"; print "\n"; exit; }