From 370f61ed8493567e3393703ef40238b9d587232e Mon Sep 17 00:00:00 2001 From: Stefano Zacchiroli Date: Sat, 17 Mar 2001 16:10:22 +0000 Subject: [PATCH] Added support for CGI handling, still remain some problems for headers, but it works ! - Makefile.in: - added some targets like: install and uninstall for getter and cgi - configure.in - added variable substitution for @HELM_CGI_DIR@ - http_getter.pl.in - added subroutine html_nice_answer (wrapper for simple html answers) - CGI handling when request ends with ".cgi" --- helm/http_getter/Makefile.in | 20 +++++++++--- helm/http_getter/configure.in | 3 ++ helm/http_getter/http_getter.pl.in | 49 ++++++++++++++++++++++++------ 3 files changed, 59 insertions(+), 13 deletions(-) diff --git a/helm/http_getter/Makefile.in b/helm/http_getter/Makefile.in index 5aebd5a9e..602c8d362 100644 --- a/helm/http_getter/Makefile.in +++ b/helm/http_getter/Makefile.in @@ -1,11 +1,23 @@ INSTALL_DIR=@RESOLVED_EXEC_PREFIX@/bin -CGI_DIR=$(INSTALL_DIR) +CGI_DIR=@HELM_CGI_DIR@ all: -install: - cp http_getter.pl $(INSTALL_DIR) - cp *.cgi $(INSTALL_DIR) +install: installgetter installcgi + +uninstall: uninstallcgi uninstallgetter + +installgetter: + cp http_getter.pl $(INSTALL_DIR)/ + +installcgi: + cp *.cgi $(CGI_DIR)/ + +uninstallgetter: + rm $(INSTALL_DIR)/http_getter.pl + +uninstallcgi: + for f in *.cgi; do rm -f $(CGI_DIR)/$$f; done clean: diff --git a/helm/http_getter/configure.in b/helm/http_getter/configure.in index 7d0c82781..13ba5aee7 100644 --- a/helm/http_getter/configure.in +++ b/helm/http_getter/configure.in @@ -27,6 +27,8 @@ else RESOLVED_EXEC_PREFIX=$RESOLVED_PREFIX fi +HELM_CGI_DIR=$RESOLVED_PREFIX/bin + if test $USE_DEFAULTS = auto; then AC_CHECK_PROG(HAVE_HELM_CONFIG, helm-config, yes, no) if test $HAVE_HELM_CONFIG = yes; then @@ -88,6 +90,7 @@ AC_SUBST(RESOLVED_PREFIX) AC_SUBST(RESOLVED_EXEC_PREFIX) AC_SUBST(HELM_LIB_DIR) AC_SUBST(PERL_BINARY) +AC_SUBST(HELM_CGI_DIR) AC_OUTPUT([ Makefile diff --git a/helm/http_getter/http_getter.pl.in b/helm/http_getter/http_getter.pl.in index 484041c8e..e301963bc 100755 --- a/helm/http_getter/http_getter.pl.in +++ b/helm/http_getter/http_getter.pl.in @@ -29,6 +29,7 @@ my $VERSION = "@VERSION@"; # various variables my ($HELM_LIB_PATH); +my $cgi_dir = "@HELM_CGI_DIR@"; my (%map); # First of all, let's load HELM configuration @@ -224,7 +225,7 @@ while (my $c = $d->accept) { mk_urls_of_uris(); kill(USR1,getppid()); # signal changes to parent print " done\n"; - answer($c,"

Update done

","text/html",""); + html_nice_answer($c,"Update done"); } elsif ($http_method eq 'GET' and $http_path eq "/ls") { # send back keys that begin with a given uri my ($uritype,$uripattern,$uriprefix); @@ -243,8 +244,8 @@ while (my $c = $d->accept) { if ($uritype ne "invalid") { # uri is valid if (($outype ne 'txt') and ($outype ne 'xml')) { # invalid out type print "Invalid output type specified: $outype\n"; - answer($c,"

Invalid output type, may be ". - "\"txt\" or \"xml\"

","text/html",""); + html_nice_answer($c,"Invalid output type, must be ". + "'txt' or 'xml'"); } else { # valid output print "BASEURI $baseuri, FORMAT $outype\n"; $cont = finduris($uritype,$uripattern,$outype); @@ -259,13 +260,33 @@ while (my $c = $d->accept) { } else { # invalid uri print "Invalid uri: $baseuri, may begin with 'cic:', ". "'theory:' or '*:'\n"; - answer($c,"

Invalid uri , may begin with ". - "\"cic:\", \"theory:\" or \"*:\"

","text/html",""); + html_nice_answer($c,"Invalid uri , must begin with ". + "'cic:' or 'theory:'"); } } elsif ($http_method eq 'GET' and $http_path eq "/help") { - print "Help requested!"; - answer($c,"

HTTP Getter Version ". - $VERSION."

","text/html",""); + print "Help requested!\n"; + html_nice_answer($c,"HTTP Getter Version: $VERSION"); + } elsif ($http_method eq 'GET' and $http_path =~ /\.cgi$/) { + print "CGI requested!\n"; + if ($http_path !~ /^\/[^\/]*\.cgi$/) { + html_nice_answer($c,"Invalid CGI name: $http_path, ". + "you can't request CGI that contain a slash in the name\n"); + } elsif (stat "$cgi_dir"."$http_path") { + if (not -x "$cgi_dir/$http_path") { + html_nice_answer($c,"CGI $http_path found but not ". + "executable\n"); + } else { # exec CGI and anser back its output + my %old_ENV = %ENV; + %ENV = (); + $ENV{'QUERY_STRING'} = $http_query; + my $cgi_output = `$cgi_dir/$http_path`; + answer($c,$cgi_output,"",""); + %ENV = %old_ENV; + } + } else { + html_nice_answer($c,"CGI '$http_path' not found ". + "in CGI dir '$cgi_dir'"); + } } else { print "\n"; print "INVALID REQUEST!!!!!\n"; @@ -562,15 +583,25 @@ sub download { } sub answer { +# answer the client setting content, Content-Type and Content-Enconding +# of the answer my ($c,$cont,$contype,$contenc) = @_; my $res = new HTTP::Response; $res->content($cont); - $res->push_header("Content-Type" => $contype); + $res->push_header("Content-Type" => $contype) + unless ($contype eq ""); $res->push_header("Content-Encoding" => $contenc) unless ($contenc eq ""); $c->send_response($res); } +sub html_nice_answer { +# answer the client whith a nice html document + my ($c,$content) = @_; + $content = "

$content

"; + answer($c,$content,"text/html",""); +} + sub helm_wget { #retrieve a file from an url and write it to a temp dir #used for retrieve resource index from servers -- 2.39.2