home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 2003 March / DPPCPRO0303.ISO / Netfusion / data1.cab / Components / BBSComp / bbs / cgi-bin-Unix / bbs-submit.cgi next >
Encoding:
Text File  |  1998-12-10  |  7.0 KB  |  222 lines

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