Rs-Form.Pl
From Pickwiki
Jump to navigationJump to search
HomePage>>SourceCode>>PerlSource
This script is referenced from a web page form, marshalls all the parameters and passes them thru a named pipe to CGI.MASTER.
sunset /usr/local/apache/share/cgi-bin> cat rs-form.cgi #!/usr/local/bin/perl use CGI qw(:standard); print header(); $acc=param("account"); if ($acc eq "") { print "<H1>Internal cgi error - must specify an account!</H1>\n"; exit 0; } # Use process id for temp file $rr = $$; # This is the named pipe that the basic program is monitoring $infile = "/samba_share/web/in/$acc/in_from_perl"; open(INFO, ">$infile") or die "Cannot open $infile"; # Make the named pipe to read from, later $outfile = "/samba_share/web/out/$acc/$rr"; if (system('mknod', $outfile, 'p')) { die "mknod $outfile failed"; } chmod 0777, $outfile; # Delimiter to seperate rows is @AM $rec_delim=chr(254); # Delimiter to seperate fields is @VM $fld_delim=chr(253); # First, tell CGI.MASTER the place to write its output - the named pipe # we just created. as soon as we send everything, we'll wait for some # output from the named pipe print INFO $outfile,$rec_delim; foreach $key (param()) { # This join is a little obscure - if the field being returned is # single valued it does nothing. only for select lists with multiple # items does it produce a dynamic array $value = join($fld_delim, param($key)); # Likewise, this next line usually does nothing, except when a multi-line # text box is being retrieved. it too produces a dynamic array $value =~ s/\r\n/$fld_delim/og; # Send the data thru the named pipe to CGI.MASTER print INFO "$key=",$value,$rec_delim; } # Send the IP address of the remote host print INFO "ip=",$ENV{[[REMOTE_ADDR]]},$rec_delim; close(INFO) or die "Cannot close $infile"; # This next line will block until something is sent to the named pipe open(OUTF, "<$outfile") or die "Cannot open $outfile"; # Ok, now we've got some data, send it to stdout, which the web server # will pass on to the browser... oh, the tangled webs we weave! while (<OUTF>) { # We undo the messing around with field delims on the way back s/$rec_delim/\n/og; s/$fld_delim/\n/og; print; } print end_html; # Finally, get rid of the temporary named pipe unlink($outfile);