home *** CD-ROM | disk | FTP | other *** search
/ Internet 1996 World Exposition / park.org.s3.amazonaws.com.7z / park.org.s3.amazonaws.com / cgi-bin / Japan / Guestbook / guestbook.pl next >
Perl Script  |  2017-09-21  |  20KB  |  752 lines

  1. #!/usr/bin/perl
  2.  
  3. # Guestbook for the World Wide Web
  4. # Created by Matt Wright           Version 2.3.1
  5. # Created on: 4/21/95      Last Modified: 10/29/95
  6.  
  7.  
  8. #############################################################################
  9. # Set Variables
  10.  
  11. $DOCUMENT_ROOT = $ENV{"DOCUMENT_ROOT"} ;
  12. $GUESTBOOKHOST = "workplace.jaist.ac.jp" ;
  13. $GUESTBOOKPATH = "/Japan/Guestbook/guestbook.html" ;
  14.  
  15. $guestbookurl = "http://" . $GUESTBOOKHOST . $GUESTBOOKPATH ;
  16. $guestbookreal = $DOCUMENT_ROOT . $GUESTBOOKPATH ;
  17. $guestlog = "$DOCUMENT_ROOT" . "/Japan/Guestbook/guestlog.html";
  18. $cgiurl = "http://" . $GUESTBOOKHOST . "/cgi-bin/Japan/Guestbook/guestbook.pl";
  19. $date_command = "/usr/bin/date";
  20.  
  21. # Set Your Options:
  22. $mail = 0;              # 1 = Yes; 0 = No
  23. $uselog = 1;            # 1 = Yes; 0 = No
  24. $linkmail = 1;          # 1 = Yes; 0 = No
  25. $separator = 1;         # 1 = <hr>; 0 = <p>
  26. $redirection = 0;       # 1 = Yes; 0 = No
  27. $entry_order = 1;       # 1 = Newest entries added first;
  28.                         # 0 = Newest Entries added last.
  29. $remote_mail = 0;       # 1 = Yes; 0 = No
  30. $allow_html = 1;        # 1 = Yes; 0 = No
  31. $line_breaks = 0;    # 1 = Yes; 0 = No
  32.  
  33. # If you answered 1 to $mail or $remote_mail you will need to fill out 
  34. # these variables below:
  35. $mailprog = '/usr/lib/sendmail';
  36. $recipient = 'shinoda@jaist.ac.jp';
  37.  
  38. # lock file name - bjb, 02-jan-1996
  39. local($lockfile) = "/tmp/guestbook.lock";
  40.  
  41. # Done
  42. #############################################################################
  43.  
  44.  
  45. # Get the Date for Entry
  46. $date = `$date_command +"%A, %B %d, %Y at %T (%Z)"`; chop($date);
  47. $shortdate = `$date_command +"%D %T %Z"`; chop($shortdate);
  48.  
  49. # Get the input
  50. read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
  51.  
  52. # Split the name-value pairs
  53. @pairs = split(/&/, $buffer);
  54.  
  55. foreach $pair (@pairs) {
  56.    ($name, $value) = split(/=/, $pair);
  57.  
  58.    # Un-Webify plus signs and %-encoding
  59.    $value =~ tr/+/ /;
  60.    $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  61.    $value =~ s/<!--(.|\n)*-->//g;
  62.  
  63.    if ($allow_html != 1) {
  64.       $value =~ s/<([^>]|\n)*>//g;
  65.    }
  66.  
  67.    $FORM{$name} = $value;
  68. }
  69.  
  70. # Print the Blank Response Subroutines
  71. &no_comments unless $FORM{'comments'};
  72. &no_name unless $FORM{'realname'};
  73.  
  74. # attempt to lock guestbook access
  75. if (&lockFile == 1) {
  76.     # lock failed
  77.     &lock_failed;
  78.     exit 0;
  79. }
  80.  
  81. # Begin the Editing of the Guestbook File
  82. $retcode = open (FILE, "$guestbookreal");
  83. if (! defined ($retcode)) {
  84.     $fatal_error_string="Can't Open $guestbookreal: $!\n";
  85.     &fatal_error;
  86.     }
  87. @LINES=<FILE>;
  88. close(FILE);
  89. $SIZE=@LINES;
  90.  
  91. # Open Link File to Output
  92. $retcode = open (GUEST, "+>$guestbookreal");
  93. if (! defined ($retcode)) {
  94.     $fatal_error_string="Can't Open $guestbookreal for writing: $!\n";
  95.     &fatal_error;
  96.     }
  97.  
  98. for ($i=0;$i<=$SIZE;$i++) {
  99.    $_=$LINES[$i];
  100.    if (/<!--begin-->/) { 
  101.  
  102.       if ($entry_order eq '1') {
  103.          print GUEST "<!--begin-->\n";
  104.       }
  105.    
  106.       if ($line_breaks == 1) {
  107.          $FORM{'comments'} =~ s/\cM\n/<br>\n/g;
  108.       }
  109.  
  110.       print GUEST "$FORM{'comments'}<br>\n";
  111.  
  112.  
  113.       if ($FORM{'url'}) {
  114.          print GUEST "<p><a href=\"$FORM{'url'}\"> $FORM{'realname'}</a>";
  115.       }
  116.       else {
  117.          print GUEST "<p>$FORM{'realname'}";
  118.       }
  119.  
  120.       if ( $FORM{'username'} ){
  121.          if ($linkmail eq '1') {
  122.             print GUEST " <a href=\"mailto:$FORM{'username'}\">";
  123.             print GUEST "\($FORM{'username'}\)</a>";
  124.          }
  125.          else {
  126.             print GUEST " $FORM{'username'}";
  127.          }
  128.       }
  129.  
  130.       print GUEST "<br>\n";
  131.  
  132.       if ( $FORM{'city'} ){
  133.          print GUEST "$FORM{'city'},";
  134.       }
  135.      
  136.       if ( $FORM{'state'} ){
  137.          print GUEST " $FORM{'state'}";
  138.       }
  139.  
  140.       if ( $FORM{'country'} ){
  141.          print GUEST " $FORM{'country'}";
  142.       }
  143.  
  144.       if ($separator eq '1') {
  145.          print GUEST "<br>\n$date<hr align=left width=400>\n\n<!--New Entry-->\n<p>\n";
  146.       }
  147.       else {
  148.          print GUEST "<br>\n$date<hr align=left width=400>\n\n<!--New Entry-->\n<p>\n";
  149.       }
  150.  
  151.       if ($entry_order eq '0') {
  152.          print GUEST "<!--begin-->\n";
  153.       }
  154.       if ($uselog eq '1') {
  155.       &log('entry');
  156.       }
  157.    }
  158.    else {
  159.       print GUEST $_;
  160.    }
  161. }
  162.  
  163. close (GUEST);
  164.  
  165. # unlock guestbook access
  166. &unlockFile;
  167.  
  168. #
  169. # Submit the same entry for distribution via inews
  170. #
  171. open(INEWS, "|/usr/local/news/inews -h") ;
  172. print INEWS "Newsgroups: park.test\n" ;
  173. print INEWS "From: root@workplace.jaist.ac.jp\n" ;
  174. print INEWS "Subject: New guestbook entry\n" ;
  175. print INEWS "\n" ;
  176. print INEWS "DATE=$date\n" ;
  177. print INEWS "SHORTDATE=$shortdate\n" ;
  178. print INEWS "REMOTE_HOST=$ENV{'REMOTE_HOST'}\n";
  179. print INEWS "SERVER_NAME=$ENV{'SERVER_NAME'}\n";
  180. print INEWS "CONTENT_LENGTH=$ENV{'CONTENT_LENGTH'}\n";
  181. print INEWS "CONTENT=$buffer\n" ;
  182. close(INEWS) ;
  183.  
  184. # Log The Entry
  185.  
  186.  
  187.  
  188. #########
  189. # Options
  190.  
  191. # Mail Option
  192. if ($mail eq '1') {
  193.     if (!open (MAIL, "|$mailprog $recipient")) {
  194.     $fatal_error_string="Can't open $mailprog!\n";
  195.     &fatal_error;
  196.     }
  197.    print MAIL "Reply-to: $FORM{'username'} ($FORM{'realname'})\n";
  198.    print MAIL "From: $FORM{'username'} ($FORM{'realname'})\n";
  199.    print MAIL "Subject: Entry to Guestbook\n\n";
  200.    print MAIL "You have a new entry in your guestbook:\n\n";
  201.    print MAIL "------------------------------------------------------\n";
  202.    print MAIL "$FORM{'comments'}\n";
  203.    print MAIL "$FORM{'realname'}";
  204.  
  205.    if ( $FORM{'username'} ){
  206.       print MAIL " <$FORM{'username'}>";
  207.    }
  208.  
  209.    print MAIL "\n";
  210.  
  211.    if ( $FORM{'city'} ){
  212.       print MAIL "$FORM{'city'},";
  213.    }
  214.  
  215.    if ( $FORM{'state'} ){
  216.       print MAIL " $FORM{'state'}";
  217.    }
  218.  
  219.    if ( $FORM{'country'} ){
  220.       print MAIL " $FORM{'country'}";
  221.    }
  222.  
  223.    print MAIL " - $date\n";
  224.    print MAIL "------------------------------------------------------\n";
  225.  
  226.    close (MAIL);
  227. }
  228.  
  229. if ($remote_mail eq '1' && $FORM{'username'}) {
  230.     if (!open (MAIL, "|$mailprog $recipient")) {
  231.     $fatal_error_string="Can't open $mailprog!\n";
  232.     &fatal_error;
  233.     }
  234.  
  235.    print MAIL "To: $FORM{'username'}\n";
  236.    print MAIL "From: $recipient\n";
  237.    print MAIL "Subject: Entry to Guestbook\n\n";
  238.    print MAIL "Thank you for adding to my guestbook.\n\n";
  239.    print MAIL "------------------------------------------------------\n";
  240.    print MAIL "$FORM{'comments'}\n";
  241.    print MAIL "$FORM{'realname'}";
  242.  
  243.    if ( $FORM{'username'} ){
  244.       print MAIL " <$FORM{'username'}>";
  245.    }
  246.  
  247.    print MAIL "\n";
  248.  
  249.    if ( $FORM{'city'} ){
  250.       print MAIL "$FORM{'city'},";
  251.    }
  252.  
  253.    if ( $FORM{'state'} ){
  254.       print MAIL " $FORM{'state'}";
  255.    }
  256.  
  257.    if ( $FORM{'country'} ){
  258.      print MAIL " $FORM{'country'}";
  259.    }
  260.  
  261.    print MAIL " - $date\n";
  262.    print MAIL "------------------------------------------------------\n";
  263.  
  264.    close (MAIL);
  265. }
  266.  
  267. # Print Out Initial Output Location Heading
  268. if ($redirection eq '1') {
  269.    print "Location: $guestbookurl\n\n";
  270. }
  271. else { 
  272.    &no_redirection;
  273. }
  274.  
  275. #######################
  276. # Subroutines
  277.  
  278. sub no_comments {
  279.    print "Content-type: text/html\n\n";
  280.  
  281. print "<HTML><HEAD><TITLE>\n";
  282. print "No Comments\n";
  283. print "</TITLE></HEAD>\n";
  284. print "\n";
  285. print "\n";
  286. print "<BODY BGCOLOR=\"#FFFFFF\" background=\"/Images/expo_hbk_01.gif\" TEXT=\"#000000\" LINK=\"#97694F\" VLINK=\"#42426f\">\n";
  287. print "\n";
  288. print "<a href=\"/cgi-bin/imagemap/Images/htoolbar.map\">\n";
  289. print "<img align=\"left\" width=\"486\" height=\"101\" \n";
  290. print "SRC=\"/Images/htoolbar.gif\" ISMAP border=\"0\"></a>\n";
  291. print "<br clear=\"all\">\n";
  292. print "\n";
  293. print "<table width=\"500\" height=\"0\"  border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  294. print "    <tr>\n";
  295. print "        <td align=\"left\" valign=\"top\" height=\"26\" colspan=\"2\">\n";
  296. print "    </td></tr>\n";
  297. print "<tr>\n";
  298. print "<td align=\"left\" valign=\"top\" width=\"100\"></td>\n";
  299. print "\n";
  300. print "<td align=\"left\" valign=\"top\" width=\"400\">\n";
  301. print "\n";
  302. print "<p>\n";
  303. print "<font size=\"+2\"><b>Your <i>Comments</i> Are Blank</font size=\"+2\"></b>\n";
  304. print "\n";
  305. print "<p>\n";
  306. print "You did not fill out the comments section.  Due to an\n";
  307. print "<a href=\"http://town.hall.org/Archives/radio/IMS/SoundBytes/021594_byte_01_IMS.au\">arbitrary rule,<\/a>\n"; 
  308. print "we won\'t add your guestbook inscription without\n";
  309. print "a comment filled in.\n";
  310. print "Would you mind trying again?\n";
  311. print "\n";
  312. print "\n";
  313. print "<p>\n";
  314. print "<form method=POST action=\"$cgiurl\">\n";
  315. print "\n";
  316. print "<input value=\"$FORM{'realname'}\" type=\"text\" name=\"realname\" size=\"40\"> Your Name<br>\n";
  317. print "<input type=\"text\" value=\"$FORM{'username'}\" name=\"username\" size=\"40\"> E-mail<br>\n";
  318. print "<input type=\"text\" name=\"url\" value=\"$FORM{'url'}\" size=\"40\"> Your URL<br>\n";
  319. print "\n";
  320. print "<p>\n";
  321. print "<table width=\"400\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  322. print "\n";
  323. print "<tr>\n";
  324. print "    <td align=\"left\">\n";
  325. print "    <input type=\"text\" name=\"city\" value=\"$FORM{'city'}\" size=\"15\"><br>City</td>\n";
  326. print "    <td align=\"left\">\n";
  327. print "    <input type=\"text\" name=\"state\" value=\"$FORM{'state'}\" size=\"15\"><br>State</td>\n";
  328. print "    <td align=\"left\">\n";
  329. print "    <input type=\"text\" name=\"country\" value=\"$FORM{'country'}\" size=\"10\"><br>Country</td>\n";
  330. print "\n";
  331. print "</tr></table>\n";
  332. print "\n";
  333. print "<p>\n";
  334. print "Comments:<br>\n";
  335. print "<textarea name=\"comments\" COLS=\"60\" ROWS=\"4\"></textarea><p>\n";
  336. print "\n";
  337. print "<table width=\"400\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  338. print "<tr>\n";
  339. print "    <td align=\"left\">\n";
  340. print "    <input value=\"Reinscribe Guestbook\" type=\"submit\"></td>\n";
  341. print "    <td align=\"left\">\n";
  342. print "    <input value=\"Reset Form\" type=\"reset\"></td>\n";
  343. print "</tr></table>\n";
  344. print "\n";
  345. print "    </form>\n";
  346. print "\n";
  347. print "    </td>\n";
  348. print "    </tr>\n";
  349. print "</table>\n";
  350. print "  </body>\n";
  351. print "</html>\n";
  352.  
  353.  
  354.    # Log The Error
  355.    if ($uselog eq '1') {
  356.       &log('no_comments');
  357.    }
  358.  
  359.      &unlockFile;
  360.    exit;
  361. }
  362.  
  363. sub no_name {
  364.    print "Content-type: text/html\n\n";
  365.    print "<html><head><title>No Name</title></head>\n";
  366.  
  367.  
  368. print "\n";
  369. print "\n";
  370. print "<BODY BGCOLOR=\"#FFFFFF\" background=\"/Images/expo_hbk_01.gif\" TEXT=\"#000000\" LINK=\"#97694F\" VLINK=\"#42426f\">\n";
  371. print "\n";
  372. print "<a href=\"/cgi-bin/imagemap/Images/htoolbar.map\">\n";
  373. print "<img align=\"left\" width=\"486\" height=\"101\" \n";
  374. print "SRC=\"/Images/htoolbar.gif\" ISMAP border=\"0\"></a>\n";
  375. print "<br clear=\"all\">\n";
  376. print "\n";
  377. print "<table width=\"500\" height=\"0\"  border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  378. print "    <tr>\n";
  379. print "        <td align=\"left\" valign=\"top\" height=\"26\" colspan=\"2\">\n";
  380. print "    </td></tr>\n";
  381. print "<tr>\n";
  382. print "<td align=\"left\" valign=\"top\" width=\"100\"></td>\n";
  383. print "\n";
  384. print "<td align=\"left\" valign=\"top\" width=\"400\">\n";
  385. print "\n";
  386. print "<p>\n";
  387. print "<font size=\"+2\"><b>Your <i>Name</i> Was Blank</font size=\"+2\"></b>\n";
  388. print "\n";
  389. print "<p>\n";
  390. print "You did not fill out your name.  Due to an\n";
  391. print "<a href=\"http://town.hall.org/Archives/radio/IMS/SoundBytes/021594_byte_01_IMS.au\">arbitrary rule,</a>\n"; 
  392. print "we will not add your guestbook inscription without\n";
  393. print "a comment filled in.\n";
  394. print "Would you mind trying again?\n";
  395. print "\n";
  396. print "\n";
  397. print "<p>\n";
  398. print "<form method=POST action=\"$cgiurl\">\n";
  399. print "\n";
  400. print "<input type=\"text\" name=\"realname\" size=\"40\"> Your Name<br>\n";
  401. print "<input type=\"text\" value=\"$FORM{'username'}\" name=\"username\" size=\"40\"> E-mail<br>\n";
  402. print "<input type=\"text\" name=\"url\" value=\"$FORM{'url'}\" size=\"40\"> Your URL<br>\n";
  403. print "\n";
  404. print "<p>\n";
  405. print "<table width=\"400\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  406. print "\n";
  407. print "<tr>\n";
  408. print "    <td align=\"left\">\n";
  409. print "    <input type=\"text\" name=\"city\" value=\"$FORM{'city'}\" size=\"15\"><br>City</td>\n";
  410. print "    <td align=\"left\">\n";
  411. print "    <input type=\"text\" name=\"state\" value=\"$FORM{'state'}\" size=\"15\"><br>State</td>\n";
  412. print "    <td align=\"left\">\n";
  413. print "    <input type=\"text\" name=\"country\" value=\"$FORM{'country'}\" size=\"10\"><br>Country</td>\n";
  414. print "\n";
  415. print "</tr></table>\n";
  416. print "\n";
  417. print "<p>\n";
  418. print "Comments:<br>\n";
  419. print "<textarea name=\"comments\" value=\"$FORM{'comments'}\" COLS=\"60\" ROWS=\"4\"></textarea><p>\n";
  420. print "\n";
  421. print "<table width=\"400\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  422. print "<tr>\n";
  423. print "    <td align=\"left\">\n";
  424. print "    <input value=\"Reinscribe Guestbook\" type=\"submit\"></td>\n";
  425. print "    <td align=\"left\">\n";
  426. print "    <input value=\"Reset Form\" type=\"reset\"></td>\n";
  427. print "</tr></table>\n";
  428. print "\n";
  429. print "    </form>\n";
  430. print "\n";
  431. print "    </td>\n";
  432. print "    </tr>\n";
  433. print "</table>\n";
  434. print "  </body>\n";
  435. print "</html>\n";
  436.  
  437.  
  438.    # Log The Error
  439.    if ($uselog eq '1') {
  440.       &log('no_name');
  441.    }
  442.  
  443.      &unlockFile;
  444.    exit;
  445. }
  446.  
  447. # Log the Entry or Error
  448. sub log {
  449.    $log_type = $_[0];
  450.    open (LOG, ">>$guestlog");
  451.    if ($log_type eq 'entry') {
  452.       print LOG "$ENV{'REMOTE_HOST'} - [$shortdate]<br>\n";
  453.       print LOG "$i\n";
  454.    }
  455.    elsif ($log_type eq 'no_name') {
  456.       print LOG "$ENV{'REMOTE_HOST'} - [$shortdate] - ERR: No Name<br>\n";
  457.    }
  458.    elsif ($log_type eq 'no_comments') {
  459.       print LOG "$ENV{'REMOTE_HOST'} - [$shortdate] - ERR: No ";
  460.       print LOG "Comments<br>\n";
  461.    }
  462. }
  463.  
  464. # Redirection Option
  465. sub no_redirection {
  466.  
  467. # Print Beginning of HTML
  468. print "Content-Type: text/html\n\n";
  469. print "<html><head><title>Thank You</title></head>\n";
  470. print "<BODY BGCOLOR=\"#FFFFFF\" background=\"/Images/expo_hbk_01.gif\" TEXT=\"#000000\" LINK=\"#97694F\" VLINK=\"#42426f\">\n";
  471. print "\n";
  472. print "<a href=\"/cgi-bin/imagemap/Images/htoolbar.map\">\n";
  473. print "<img align=\"left\" width=\"486\" height=\"101\" \n";
  474. print "SRC=\"/Images/htoolbar.gif\" ISMAP border=\"0\"></a>\n";
  475. print "<br clear=\"all\">\n";
  476. print "\n";
  477. print "<table width=\"500\" height=\"0\"  border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
  478. print "<tr>\n";
  479. print "<td align=\"left\" valign=\"top\" height=\"26\" colspan=\"2\">\n";
  480. print "</td></tr>\n";
  481. print "<tr>\n";
  482. print "<td align=\"left\" valign=\"top\" width=\"100\"></td>\n";
  483. print "\n";
  484. print "<td align=\"left\" valign=\"top\" width=\"400\">\n";
  485. print "\n";
  486. print "<p>\n";
  487. print "<font size=\"+2\"><b>\n";
  488. print "<a href=\"http://town.hall.org/Archives/radio/IMS/SoundBytes/111894_byte_01_RTFM.au\">Thank You!</a>\n";
  489. print "</font size=\"+2\"></b>\n";
  490. print "\n";
  491. print "<p>\n";
  492.  
  493.  
  494.    # Print Response
  495.    print "Thank you for filling in the guestbook.  Your entry has\n";
  496.    print "been added to the guestbook.\n";
  497.    print "Here is what you submitted:<p>\n";
  498.    print "<hr><p>$FORM{'comments'}<p>\n";
  499.  
  500.    if ($FORM{'url'}) {
  501.       print "<a href=\"$FORM{'url'}\">$FORM{'realname'}</a>";
  502.    }
  503.    else {
  504.       print "$FORM{'realname'}";
  505.    }
  506.  
  507.    if ( $FORM{'username'} ){
  508.       if ($linkmail eq '1') {
  509.          print " \(<a href=\"mailto:$FORM{'username'}\">";
  510.          print "$FORM{'username'}</a>\)";
  511.       }
  512.       else {
  513.          print " \($FORM{'username'}\)";
  514.       }
  515.    }
  516.  
  517.    print "<br>\n";
  518.  
  519.    if ( $FORM{'city'} ){
  520.       print "$FORM{'city'},";
  521.    }
  522.  
  523.    if ( $FORM{'state'} ){
  524.       print " $FORM{'state'}";
  525.    }
  526.  
  527.    if ( $FORM{'country'} ){
  528.       print " $FORM{'country'}";
  529.    }
  530.  
  531.    print "<br>$date<p>\n";
  532.  
  533.    # Print End of HTML
  534.    print "<p><hr><p>\n";
  535.    print "<a href=\"$guestbookurl\">Back to the Guestbook</a>\n";         
  536.     print "- You may need to reload it when you get there to see your\n";
  537.    print "entry.\n";
  538.  
  539. print "\n";
  540. print "\n";
  541. print "</td>\n";
  542. print "</tr>\n";
  543. print "</table>\n";
  544. print " </body>\n";
  545. print "</html>\n";
  546.  
  547.  
  548.    &unlockFile;
  549.    exit;
  550. }
  551.  
  552.  
  553. #
  554. # basic file locking support - bjb, 02-jan-1996
  555. #
  556.  
  557. #
  558. # create lock file
  559. #
  560. sub lockFile {
  561.     # current retry attempt
  562.     local($lockAttempts) = 1;
  563.     # max retry limit
  564.     local($lockMaxAttempts) = 3;
  565.  
  566.     while (-f "$lockfile") {
  567.         if ($lockAttempts > $lockMaxAttempts) {
  568.             return 1;
  569.         }
  570.         sleep 1;
  571.         $lockAttempts++;
  572.     }
  573.  
  574.     open(LOCK, ">$lockfile") || &lock_failed;
  575.     return 0;
  576. }
  577.  
  578. #
  579. # remove lock file
  580. #
  581. sub unlockFile {
  582.     if (-f "$lockfile") {
  583.         unlink("$lockfile");
  584.     }
  585. }
  586.  
  587. #
  588. # generate lock failed message
  589. #
  590. sub lock_failed {
  591.    print <<EoI;
  592. Content-type: text/html
  593.  
  594. <html><head><title>File Lock Failed</title></head>
  595.  
  596. <BODY BGCOLOR="#FFFFFF" background="/Images/expo_hbk_01.gif" TEXT="#000000" LINK="#97694F" VLINK="#42426f">
  597.  
  598. <a href="/cgi-bin/imagemap/Images/htoolbar.map">
  599. <img align="left" width="486" height="101" 
  600. SRC="/Images/htoolbar.gif" ISMAP border="0"></a>
  601. <br clear="all">
  602.  
  603. <table width="500" height="0"  border="0" cellpadding="0" cellspacing="0">
  604.     <tr>
  605.         <td align="left" valign="top" height="26" colspan="2">
  606.     </td></tr>
  607. <tr>
  608. <td align="left" valign="top" width="100"></td>
  609.  
  610. <td align="left" valign="top" width="400">
  611.  
  612. <p>
  613. <font size="+2"><b>File Locking Failed</font></b>
  614.  
  615. <p>
  616. Unable to update guestbook because somebody else was submitting their
  617. comments.  Would you mind trying again by resubmitting?
  618. <p>
  619. <form method=POST action="$cgiurl">
  620.  
  621. <input type="text" value="$FORM{'realname'}" name="realname" size="40"> Your Name<br>
  622. <input type="text" value="$FORM{'username'}" name="username" size="40"> E-mail<br>
  623. <input type="text" name="url" value="$FORM{'url'}" size="40"> Your URL<br>
  624.  
  625. <p>
  626. <table width="400" border="0" cellpadding="0" cellspacing="0">
  627.  
  628. <tr>
  629.     <td align="left">
  630.     <input type="text" name="city" value="$FORM{'city'}" size="15"><br>City</td>
  631.     <td align="left">
  632.     <input type="text" name="state" value="$FORM{'state'}" size="15"><br>State</td>
  633.     <td align="left">
  634.     <input type="text" name="country" value="$FORM{'country'}" size="10"><br>Country</td>
  635.  
  636. </tr></table>
  637.  
  638. <p>
  639. Comments:<br>
  640. <textarea name="comments" value="$FORM{'comments'}" COLS="60" ROWS="4"></textarea><p>
  641.  
  642. <table width="400" border="0" cellpadding="0" cellspacing="0">
  643. <tr>
  644.     <td align="left">
  645.     <input value="Reinscribe Guestbook" type="submit"></td>
  646.     <td align="left">
  647.     <input value="Reset Form" type="reset"></td>
  648. </tr></table>
  649.  
  650.     </form>
  651.  
  652.     </td>
  653.     </tr>
  654. </table>
  655.  
  656. </body>
  657. </html>
  658.  
  659. EoI
  660.  
  661.     # Log The Error
  662.     if ($uselog eq '1') {
  663.         &log('lock_failed');
  664.     }
  665.  
  666.     exit 0;
  667. }
  668.  
  669. sub fatal_error {
  670.    print <<EoI;
  671. Content-type: text/html
  672.  
  673. <html><head><title>Fatal Error</title></head>
  674.  
  675. <BODY BGCOLOR="#FFFFFF" background="/Images/expo_hbk_01.gif" TEXT="#000000" LINK="#97694F" VLINK="#42426f">
  676.  
  677. <a href="/cgi-bin/imagemap/Images/htoolbar.map">
  678. <img align="left" width="486" height="101" 
  679. SRC="/Images/htoolbar.gif" ISMAP border="0"></a>
  680. <br clear="all">
  681.  
  682. <table width="500" height="0"  border="0" cellpadding="0" cellspacing="0">
  683.     <tr>
  684.         <td align="left" valign="top" height="26" colspan="2">
  685.     </td></tr>
  686. <tr>
  687. <td align="left" valign="top" width="100"></td>
  688.  
  689. <td align="left" valign="top" width="400">
  690.  
  691. <p>
  692. <font size="+2"><b>Fatal Error</font></b>
  693. <p>
  694. <b>$fatal_error_string</b>
  695. <p>
  696. We are very sorry, but we are having problems with our guestbook.  Please
  697. <a href="mailto:fairmaster@park.org">here</a> to send mail to
  698. <a href="mailto:fairmaster@park.org">fairmaster@park.org</a>.  We would
  699. appreciate it if you would include the text of the error message listed
  700. above.
  701. <p>
  702. <form method=POST action="$cgiurl">
  703.  
  704. <input type="text" value="$FORM{'realname'}" name="realname" size="40"> Your Name<br>
  705. <input type="text" value="$FORM{'username'}" name="username" size="40"> E-mail<br>
  706. <input type="text" name="url" value="$FORM{'url'}" size="40"> Your URL<br>
  707.  
  708. <p>
  709. <table width="400" border="0" cellpadding="0" cellspacing="0">
  710.  
  711. <tr>
  712.     <td align="left">
  713.     <input type="text" name="city" value="$FORM{'city'}" size="15"><br>City</td>
  714.     <td align="left">
  715.     <input type="text" name="state" value="$FORM{'state'}" size="15"><br>State</td>
  716.     <td align="left">
  717.     <input type="text" name="country" value="$FORM{'country'}" size="10"><br>Country</td>
  718.  
  719. </tr></table>
  720.  
  721. <p>
  722. Comments:<br>
  723. <textarea name="comments" value="$FORM{'comments'}" COLS="60" ROWS="4"></textarea><p>
  724.  
  725. <table width="400" border="0" cellpadding="0" cellspacing="0">
  726. <tr>
  727.     <td align="left">
  728.     <input value="Reinscribe Guestbook" type="submit"></td>
  729.     <td align="left">
  730.     <input value="Reset Form" type="reset"></td>
  731. </tr></table>
  732.  
  733.     </form>
  734.  
  735.     </td>
  736.     </tr>
  737. </table>
  738.  
  739. </body>
  740. </html>
  741.  
  742. EoI
  743.  
  744.     # Log The Error
  745.     if ($uselog eq '1') {
  746.     &log('fatal_error');
  747.     }
  748.    &unlockFile;
  749.    exit 0;
  750.  
  751. }
  752.