<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=Cgiserver.Pl</id>
	<title>Cgiserver.Pl - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pickwiki.org/index.php?action=history&amp;feed=atom&amp;title=Cgiserver.Pl"/>
	<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Cgiserver.Pl&amp;action=history"/>
	<updated>2026-04-29T01:10:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://pickwiki.org/index.php?title=Cgiserver.Pl&amp;diff=1602&amp;oldid=prev</id>
		<title>Conversion script: link fix</title>
		<link rel="alternate" type="text/html" href="https://pickwiki.org/index.php?title=Cgiserver.Pl&amp;diff=1602&amp;oldid=prev"/>
		<updated>2015-02-26T23:48:53Z</updated>

		<summary type="html">&lt;p&gt;link fix&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;HomePage&amp;gt;&amp;gt;SourceCode&amp;gt;&amp;gt;[[PerlSource]]&lt;br /&gt;
&lt;br /&gt;
A perl script that listens for remote connections, and feeds them thru a named pipe to CGI.MASTER&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sunset /root/perl&amp;gt; cat cgiserver.pl    &lt;br /&gt;
#!/usr/local/bin/perl&lt;br /&gt;
use IO::Socket;&lt;br /&gt;
&lt;br /&gt;
# Delimiter to seperate rows is @AM&lt;br /&gt;
$rec_delim=chr(254);&lt;br /&gt;
# Delimiter to seperate fields is @VM&lt;br /&gt;
$fld_delim=chr(253);&lt;br /&gt;
&lt;br /&gt;
# Start listening on socket 1999&lt;br /&gt;
$server = IO::Socket::INET-&amp;gt;new([[LocalPort]] =&amp;gt; 1999,&lt;br /&gt;
                                 Type     =&amp;gt; [[SOCK_STREAM]],&lt;br /&gt;
                                 Reuse    =&amp;gt; 1,&lt;br /&gt;
                                 Listen   =&amp;gt; 10 )&lt;br /&gt;
or die &amp;quot;Couldn&amp;#039;t be a server on 1999: $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
open (LOG, &amp;quot;&amp;gt;cgi.log&amp;quot;) or die &amp;quot;Cannot open cgi.log: $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
# Turn off buffering on the log filehandle&lt;br /&gt;
my $oldfh = select LOG; $| = 1; select $oldfh;&lt;br /&gt;
&lt;br /&gt;
log_msg(&amp;quot;Listening on port 1999&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
# Keep accepting connections, forever&lt;br /&gt;
while ( $client = $server-&amp;gt;accept() ) {&lt;br /&gt;
   $acc=&amp;lt;$client&amp;gt;;&lt;br /&gt;
   chomp($acc);&lt;br /&gt;
   if ($acc ne &amp;quot;TRINITY&amp;quot; &amp;amp;&amp;amp; $acc ne &amp;quot;SFSI&amp;quot;) {&lt;br /&gt;
      print $client &amp;quot;&amp;lt;H1&amp;gt;Internal cgi error - must specify an account!&amp;lt;/H1&amp;gt;\n&amp;quot;;&lt;br /&gt;
      log_msg(&amp;quot;Internal cgi error - must specify an account!&amp;quot;);&lt;br /&gt;
      next;&lt;br /&gt;
   }&lt;br /&gt;
   # Use process id for temp file&lt;br /&gt;
   $rr = $$;&lt;br /&gt;
   # This is the named pipe that the basic program is monitoring&lt;br /&gt;
   $infile = &amp;quot;/samba_share/web/in/$acc/in_from_perl&amp;quot;;&lt;br /&gt;
   open(INFO, &amp;quot;&amp;gt;$infile&amp;quot;) or die &amp;quot;Cannot open $infile: $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   # Make the named pipe to read from, later&lt;br /&gt;
   $outfile = &amp;quot;/samba_share/web/out/$acc/$rr&amp;quot;;&lt;br /&gt;
   if (system(&amp;#039;mknod&amp;#039;, $outfile, &amp;#039;p&amp;#039;)) {&lt;br /&gt;
      die &amp;quot;mknod $outfile failed: $!\n&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   chmod 0777, $outfile;&lt;br /&gt;
&lt;br /&gt;
   # First, tell CGI.MASTER the place to write its output - the named pipe&lt;br /&gt;
   # we just created.  as soon as we send everything, we&amp;#039;ll wait for some&lt;br /&gt;
   # output from the named pipe&lt;br /&gt;
   print INFO $outfile,$rec_delim;&lt;br /&gt;
&lt;br /&gt;
   while(&amp;lt;$client&amp;gt;) {&lt;br /&gt;
      chomp;&lt;br /&gt;
      if (/^EOF$/) {&lt;br /&gt;
         last;&lt;br /&gt;
      }&lt;br /&gt;
      # Send the data thru the named pipe to CGI.MASTER&lt;br /&gt;
      log_msg($_);&lt;br /&gt;
      print INFO $_,$rec_delim;&lt;br /&gt;
   }&lt;br /&gt;
   close(INFO) or die &amp;quot;Cannot close $infile: $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   # This next line will block until something is sent to the named pipe&lt;br /&gt;
   open(OUTF, &amp;quot;&amp;lt;$outfile&amp;quot;) or die &amp;quot;Cannot open $outfile: $!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   # Ok, now we&amp;#039;ve got some data, send it back thru the pipe, to the web server&lt;br /&gt;
   # will pass on to the browser... oh, the tangled webs we weave!&lt;br /&gt;
   while (&amp;lt;OUTF&amp;gt;) {&lt;br /&gt;
      # We undo the messing around with field delims on the way back&lt;br /&gt;
      s/$rec_delim/\n/og;&lt;br /&gt;
      s/$fld_delim/\n/og;&lt;br /&gt;
      # Send the html back thru the net connection&lt;br /&gt;
      print $client $_;&lt;br /&gt;
   }&lt;br /&gt;
   # Finally, get rid of the temporary named pipe&lt;br /&gt;
   unlink($outfile) or die &amp;quot;Cannot unlink $outfile:$!\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
   # Shutdown this network connection&lt;br /&gt;
   shutdown($client,2);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sub log_msg {&lt;br /&gt;
   my ($msg) = @_;&lt;br /&gt;
   print LOG scalar localtime, &amp;quot; $msg\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Conversion script</name></author>
	</entry>
</feed>