Perl CGI nicht Bestandteil der Standartdistribution?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Perl CGI nicht Bestandteil der Standartdistribution?

Beitrag von Columbus » 22.01.2006 14:01:12

Hallo zusammen,
ich war in den letzen Tagen damit beschäftigt auf meinem Notebook mein System neu zu installieren. Jetzt wollte ich meine CGI-Skripte wieder aufrufen und bekomme folgende Meldung:
[Sun Jan 22 13:33:56 2006] [error] [client 127.0.0.1] Premature end of script headers: /usr/lib/cgi-bin/database.pl
Dabei ist das mein einfachtes Skript ohne Datenbank-Aufruf usw.

Code: Alles auswählen

#!/usr/bin/perl

use warnings;
use strict;
use CGI;


my $obj = new CGI;


my $query = $obj->param ( "query"  );
my $eingabe = $obj->param ( "eingabe" );


print $obj->header ( "text/html" ),
      $obj->start_html ( -title => "Antwort" );
     
if ( $query )
{
     print $obj->h3 ( "Sie habe eine Query eingegeben! \n" );
     print $obj->h5 ( $query );
}

if ( $eingabe )
{
     print $obj->h3 ( "Sie habe eine Eingabe gemacht \n" );
     print $obj->h5 ( $eingabe );
}

print $obj->start_form ( method => "get", action => "/cgi-bin/database.pl" );

print $obj->end_html;

exit;
Jetzt frage ich mich ist CGI nicht installiert? Das ist doch Bestandteil der Standart-Distribution?!?! Oder ? Im Verzeichnis "/usr/share/perl/5.8.4" habe ich einen CGI-Ordner mit den Modulen: qw( Apache.pm Cookie.pm Carp.pm Pretty.pm ... )
Eine CGI.pm gibt es aber nicht.

Korrektur: es gibt CGI.pm's
/usr/lib/perl5/Template/Plugin/CGI.pm
/usr/share/perl/5.8.4/CGI.pm
/usr/share/perl5/Catalyst/Engine/CGI.pm
/usr/share/perl5/AppConfig/CGI.pm


Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 22.01.2006 16:10:29

Schau doch mal, was das error.log des Apachen zu sagen hat. Das muss nun nicht unbedingt am CGI.pm haengen.

Benutzeravatar
Columbus
Beiträge: 1051
Registriert: 30.04.2002 15:25:02
Wohnort: Mainz
Kontaktdaten:

Beitrag von Columbus » 22.01.2006 17:08:15

Das ist richtig, das habe ich auch schon überprüft. Ich habe mittlerweile das oben beschriebene Skript verändert. Ich habe die Zeile

Code: Alles auswählen

print $obj->start_form ( method => "get", action => "/cgi-bin/database.pl" ); 
wieder rausgenommen und dann ging es. Was immer noch Probleme bereitet ist der Zugriff auf die Datenbank. Ich habe mir von Backports.org eine neuere Version des PostgreSQL-Servers installiert, die aber nur mit dem Datenbank-Cluster, was das ganze natürlich etwas unübersichtlich macht. Früher habe ich die Einstellungen für PostgreSQL einfach in /etc/postgresql/pg_hba.conf eingetragen. Jetzt liegt das "anscheinend" in /etc/postgresql/8.1/main/pg_hba.conf. Ich hoffe das ist die zuständige Datei.

Und das habe ich eingetragen:
# Database administrative login by UNIX sockets
local all postgres ident sameuser

# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all
# "local" is for Unix domain socket connections only
local all all ident sameuser
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 md5
Und trotzdem habe ich keinen Zugriff.

Apache meldet nur das:
[Sun Jan 22 16:26:41 2006] [error] [client 127.0.0.1] Premature end of script headers: /usr/lib/cgi-bin/alle_user.pl
Vorhin hat er mir auch noch diese Meldung ausgegeben:
[Sun Jan 22 16:18:56 2006] [error] [client 127.0.0.1] Premature end of script headers: /usr/lib/cgi-bin/alle_user.pl
DBI connect('dbname=test2','postgres',...) failed: FATAL: Ident-Authentifizierung für Benutzer »postgres« fehlgeschlagen
at /usr/lib/cgi-bin/alle_user.pl line 18
Aber das macht er nun nicht mehr, obwohl ich nichts am Code diesbezüglich veräandert habe.

Gruss Christian
Die größten Kritiker der Elche,
waren früher selber welche.

F.W. Bernstein

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 23.01.2006 13:44:47

Also, mal ein paar Dinge. Zum einen, mach mal

Code: Alles auswählen

use CGI qw(fatalsToBrowser);
Damit kriegst du die Fehlermeldungen im Browser angezeigt.
Zum anderen scheinst du Fehler beim DB-Connect nicht abzufangen.
Dann noch zum Zugriffsproblem: du hast konfiguriert, dass Postgres fuer lokale Verbindungen die Benutzer per Ident nimmt. Wen CGI kommt da aber als www-data daher, da es vom Apachen gestartet wird. Du koenntest zum Beispiel beim Connect die Adresse mitgeben und hier nicht die 127.0.0.1, was ja lokal waere sondern die Adresse der Netzwerkkarte.

Antworten