home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1999 April / DPPCPRO0499.ISO / April / Netobjs / Install.exe / data1.cab / Components / BBSComp / bbs / cgi-bin / bbs-submit.cgi next >
Encoding:
Text File  |  1998-12-16  |  7.0 KB  |  223 lines

  1. #!/bin/perl
  2. #!/usr/local/bin/perl
  3. $path = "$ENV{'PATH_TRANSLATED'}";
  4. $path =~ s/bbs-submit.cgi//;
  5. $configFile = "config";
  6. $configPath = $path.$configFile;
  7. require $configPath;
  8.  
  9. print "Content-type: text/html\n\n";
  10. #
  11. # This reads in the information sent when the user pressed Submit
  12. #
  13. if ($ENV{'REQUEST_METHOD'} eq "GET") { $buffer = $ENV{'QUERY_STRING'}; }
  14. else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
  15. #
  16. # Now, using a little loop, we'll split up the data into name/value
  17. # pairs, which makes them easier to work with. 
  18. #
  19. @pairs = split(/&/, $buffer);
  20. foreach $pair (@pairs)
  21. {
  22.     ($name, $value) = split(/=/, $pair);
  23.     $value =~ tr/+/ /;
  24.     $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  25.      
  26.     $FORM{$name} = $value;
  27. }
  28. #
  29. # Once the name/value pairs have been created, you can work with
  30. # them by referring to the variable names you set up in the 
  31. # original HTML, using $FORM{"varname"}.
  32. #
  33. #
  34. # First, we make sure that they actually gave an email address
  35. #
  36. #check for error -- REQUIRE ALL
  37. ¬complete unless $FORM{'thread'} && $FORM{'time'} && $FORM{'RealTime'};
  38. #$FORM{'name'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  39. $FORM{'name'} =~ tr/\n//d;
  40. #$FORM{'email'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  41. $FORM{'email'} =~ tr/\n//d;
  42. # $FORM{'subject'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  43. $FORM{'subject'} =~ tr/\n//d;
  44. #$FORM{'body'} =~ s/([\(\)\>\<\"\'])/\\$1/g;
  45. $body = $FORM{'body'};
  46. $body =~ s/\n\r/<br>/g;
  47. $body =~ s/\r\n/<br>/g;
  48. $body =~ s/\r/<br>/g;
  49. $body =~ s/\n/<br>/g;
  50. $name = $FORM{'name'};
  51. $name =~ s/\r//g;
  52. $name =~ s/\n/<br>/g;
  53. $name2 = $name;
  54. $name2 =~ s/\\/\\\\/g;
  55. $name2 =~ s/\"/\\\"/g;
  56. $email = $FORM{'email'};
  57. $email =~ s/\r//g;
  58. $email =~ s/\n/<br>/g;
  59. $subject = $FORM{'subject'};
  60. $subject =~ s/\r//g;
  61. $subject =~ s/\n/<br>/g;
  62. $subject2 = $subject;
  63. $subject2 =~ s/\\/\\\\/g;
  64. $subject2 =~ s/\"/\\\"/g;
  65. ### The following 3 field is internal and self generating. user have no business
  66. ### to generate beyond the set allowed 
  67. &invalidchar if $FORM{'RealTime'} =~ /([*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\n\r])/;
  68. &invalidchar if $FORM{'thread'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  69. &invalidchar if $FORM{'time'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  70. &invalidchar if $FORM{'parent'} =~ /([A-z*\|\;\&\\\~\^\[\]\$\.\(\)\>\<\"\'\,\n\r])/;
  71. $realTime = $FORM{'RealTime'};
  72. $realTime =~ s/_/ /g;
  73. &makeMessage;
  74. &addToIndex;
  75. &success;
  76. exit;
  77. #######################################################################
  78.  ############################  Add to data file  #######################
  79. #######################################################################
  80. sub addToIndex {
  81.     select(STDOUT);
  82.     open(toINDEX,"$INDEX_FILE") || die "can't open $INDEX_FILE\n";
  83.     &lock(toINDEX);
  84.     open(temp, "> $TMP") || die "can't open $TMP\n";
  85.     while(<toINDEX>){
  86.         if(/<!--insertion point-->/){
  87.             print temp "parent.addpbbsArray(\"$subject2\",$FORM{'time'},\"$realTime\",\"$name2\",$FORM{'thread'},\"message/$file_handle.html\",\"$FORM{'parent'}\",\"$file_handle\")\n<!--insertion point-->\n";
  88.         }
  89.         else {
  90.             print temp $_;
  91.         }
  92.     }
  93.     &unlock(toINDEX);
  94.     close(toINDEX);
  95.     close(temp);
  96.        rename($TMP, $INDEX_FILE);
  97. }
  98. ######################################################################
  99. ############################  Make .dat file    ######################
  100. ######################################################################
  101. sub makeMessage {
  102.     select(STDOUT);
  103.     $file_handle = getToken();
  104.     open(NEW,">> $STORAGE_DIR/$file_handle.html") || die "can't open $STORAGE_DIR/$file_handle.html\n";
  105.     select(NEW);
  106. print <<"DONE";
  107. <html>
  108. <META HTTP-EQUIV="Expires" CONTENT="Sat, 29 Sep 1973 23:59:00 GMT">
  109. <head>
  110.     <title>$subject</title>
  111. </head>
  112. <body bgcolor="#FFFFFF">
  113. <script language="JavaScript">
  114. <!--
  115.     var coun = navigator.appVersion.indexOf("(");
  116.     var last = navigator.appVersion.lastIndexOf(";");
  117.     var previous = parent.returnNgbr($file_handle,"Prev");
  118.     var next = parent.returnNgbr($file_handle,"Next");
  119.     document.write('<a href="'+previous+'" target="message" > <img src="$IMAGE_DIR/previous.gif" border="0"></a>');    
  120.      document.write('<a href="'+next+'" target="message" > <img src="$IMAGE_DIR/next.gif" border="0"></a>');    
  121. //Need ../ since CGIBIN_DIR in config file is taken relative to the bbs directory.
  122.        document.write('<a href="$MESSAGE_TO_CGIBIN/submit-bbs-form.cgi?$FORM{'thread'}" target="message"><img src="$IMAGE_DIR/reply.gif" border=0></a><br>');    
  123.  
  124. //-->
  125. </script><hr>
  126. <pre>
  127. <b>Name</b>:    $name
  128. <b>Email</b>:   <a href=mailto:$email>$email </a> 
  129. <b>Subject</b>: $subject
  130. <b>Thread</b>:  $FORM{'thread'}
  131. <b>Time</b>:    $realTime
  132. </pre><hr>
  133. <!-- since 1/1/70 GMT$FORM{'time'} -->
  134. <b>
  135.     $body
  136. </b>
  137. </body>
  138. </html>
  139. DONE
  140.     close(NEW);
  141. }
  142. ###############################################################################
  143. ############################  Get Token #######################################
  144. sub getToken{
  145. ######
  146. #lock
  147. ######
  148.     open(TOKEN,"$TOKEN_FILE") || die "can't open $STORDIR/$file_handle.html\n";
  149.     &lock(TOKEN);
  150.     while (<TOKEN>) {
  151.         $tokenReturn  = "$_";
  152.         chop($tokenReturn);
  153.     }
  154.     close(TOKEN);
  155.     open(TOKEN,"> $TOKEN_FILE") || die "can't open $STORDIR/$file_handle.html\n";
  156.     $tokenNext = $tokenReturn + 1;
  157.     select(TOKEN);
  158.  print <<"DONE";
  159. $tokenNext
  160. DONE
  161.     &unlock(TOKEN);
  162.     close(TOKEN);
  163.     select(STDOUT);
  164.     return $tokenReturn;
  165. #######
  166. #unlock
  167. #######
  168. }
  169. sub lock{
  170. if ($flock_exists == 1){
  171.         local ($file_handle);
  172.         foreach $file_handle (@_){
  173.                 flock($file_handle, 2);
  174.                 }
  175.         }
  176. }
  177. sub unlock{
  178. if ($flock_exists == 1){
  179.         local ($file_handle);
  180.         foreach $file_handle (@_){
  181.                 flock($file_handle, 8);
  182.                 }
  183.         }
  184. }
  185. ###############################################################################
  186. ############################  Complete/Success  ###############################
  187. ###############################################################################
  188. sub success{
  189.     select(STDOUT);
  190.     open(EP,"$SUCCESS");
  191.     while(<EP>){
  192.         $tk = "$_";
  193.        $tk =~ s/\#\#\#\#HOME-LOCATION\#\#\#\#/$BBS_HOME/;
  194.         print "$tk";
  195.     }
  196.     close(EP);
  197.     exit;
  198. }
  199. ###############################################################################
  200. ############################  Incomplete Error  ###############################
  201. ###############################################################################
  202. sub notcomplete {
  203.     select(STDOUT);
  204.     open(EP,"$ERROR");
  205.     while(<EP>){
  206.         print "$_";
  207.     }
  208.     close(EP);
  209.     exit;
  210. ###############################################################################
  211. ############################  Invalid char  ###############################
  212. ###############################################################################
  213. sub invalidchar {
  214.     select(STDOUT);
  215.     open(EP,"$ERROR_CHAR");
  216.     while(<EP>){
  217.         print "$_";
  218.     }
  219.     close(EP);
  220.     exit;
  221.