ritschmanhard: shebang in cgi, warnings

Hi!

Ich habe folgende Frage: ich verwende ein open source cgi. Nun ist dieses mit folgender shebang ausstaffiert:

#!/usr/bin/perl

Lasse ich das so, dann funktioniert das cgi nicht und ich erhalte in /var/log/apache/errors
"failed to open log file"
"fopen: Permission denied"

Wenn ich nun -w dazufüge, funktioniert es:
#!/usr/bin/perl -w

Allerdings erhalte ich dann viele Meldungen über uninitialisierte Variable.
Nun ist es so, dass ich das CGI nur im sicheren Umfeld (Intranet) benötige, weswegen Sicherheitsaspekte zweitrangig sind. Allerdings ist das (Warning-)Meldungsaufkommen in /var/log/apache/errors enorm und sollte vermieden werden.

Wie schaffe ich es, dass (diese) Warnings unterdrückt werden?

Grüße,
Richard

  1. #!/usr/bin/perl

    Lasse ich das so, dann funktioniert das cgi nicht und ich erhalte in /var/log/apache/errors
    "failed to open log file"
    "fopen: Permission denied"

    Dann ist dein Server nicht richtig konfiguriert. Warum änderst du nicht das, anstatt an einer Stelle zu versuchen rumzupfuschen?

    Struppi.

    1. Hi!

      Dann ist dein Server nicht richtig konfiguriert. Warum änderst du nicht das, anstatt an einer Stelle zu versuchen rumzupfuschen?

      Erstmal danke für den Hinweis - ich muß gestehen, dass ich den Apache "out of the box" nutze und wenig über seine Konfigurationsmöglichkeiten weiß.
      Was allerdings erwähnenswert scheint: das CGI wird als nph ausgeführt (was auch immer das ist).
      Kannst du mir einen kleinen Tip geben, was ich anpassen muß? Und wenn es nur ein google Suchstring ist, der mich der Lösung näher bringt...

      Gruß,
      Richard

      1. » Dann ist dein Server nicht richtig konfiguriert. Warum änderst du nicht das, anstatt an einer Stelle zu versuchen rumzupfuschen?

        Erstmal danke für den Hinweis - ich muß gestehen, dass ich den Apache "out of the box" nutze und wenig über seine Konfigurationsmöglichkeiten weiß.
        Was allerdings erwähnenswert scheint: das CGI wird als nph ausgeführt (was auch immer das ist).
        Kannst du mir einen kleinen Tip geben, was ich anpassen muß? Und wenn es nur ein google Suchstring ist, der mich der Lösung näher bringt...

        nph hab ich zwar mal gelesen, weiß aber nicht was das ist, google ich jetzt aber auch nicht.

        Die Fehlermeldung klingt so, als ob sie vom Server stammen könnte, auch das Verhalten das du beschreibst. Der Apache ist normalerweise so konfiguriert, dass er Fehler und Warnungen, die Perl an STDERR ausgibt, in's errorlog schreibt. Das scheint nicht zu klappen.

        Wenn mit -w die Ausgabe im Browser erfolgt, dann ist vermutlich in dem Skript CGI::Carp eingebunden, dieses Modul leitet die Ausgabe an STDOUT, daher kommt die Fehlermeldung auch nicht mehr.

        Du musst halt dafür sorgen, dass der Apache Prozess in seine Logs schreiben kann/darf und man muss dazu sagen, dass so ein Skript natürlich auch nicht unbedingt empfehlenswert ist. Ein Perl Skript sollte mit warnungen und use strict laufen ohne irgendwelche Meldungen zu produzieren.

        Struppi.

        1. hi Struppi,

          nph hab ich zwar mal gelesen, weiß aber nicht was das ist, google ich jetzt aber auch nicht.

          non parsed header

          Jugend forscht ;-)

          Hotte

          --
          Alter forscht auch.
  2. hi,

    #!/usr/bin/perl

    Lasse ich das so, dann funktioniert das cgi nicht und ich erhalte in /var/log/apache/errors
    "failed to open log file"
    "fopen: Permission denied"

    Es funktioniert schon, nuhr: Nicht richtig. Deinem Script fehlt offensichtlich die Berechtigung, eine Datei zu "öffnen", guck in das Script, welcher "Öffnen"-Modus das ist (Lesen, Schreiben..) und passe die Berechtigungen im Dateisystem entsprechend an. Dazu prüfe auch, unter welchem "Benutzer" das CGI-ausgeführt wird.

    Wenn ich nun -w dazufüge, funktioniert es:
    #!/usr/bin/perl -w

    Dein "Funktioniert|nicht" ist vom Begriff her verwirrend. Fakt ist: Dein Script wird ausgeführt, ergo ist die shebang ok. Mit oder ohne -w

    Wie schaffe ich es, dass (diese) Warnings unterdrückt werden?

    Indem Du die Fehler bereinigst, z.B. den Geltungsbereich der Variablen prüfen/eingrenzen und mit gültigen Values vorbelegen.

    use strict;

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. »» Wenn ich nun -w dazufüge, funktioniert es:
      »» #!/usr/bin/perl -w

      Dein "Funktioniert|nicht" ist vom Begriff her verwirrend. Fakt ist: Dein Script wird ausgeführt, ergo ist die shebang ok. Mit oder ohne -w

      Ok, "funktioniert nicht" funktioniert nicht - das stimmt. Trotzdem ist es so, dass das CGI mit dem Parameter -w dazu führt, dass auf dem Client eine Ergebnisseite angezeigt wird, ohne allerdings nicht; somit wird das Script ohne Parameter -w eben nicht korrekt ausgeführt.

      »» Wie schaffe ich es, dass (diese) Warnings unterdrückt werden?

      Indem Du die Fehler bereinigst, z.B. den Geltungsbereich der Variablen prüfen/eingrenzen und mit gültigen Values vorbelegen.

      Argl - wie ich sagte, ist das nicht mein Script und doch ca. 10.000 Zeilen groß...

      use strict;

      Ich selbst immer...

      Die Berechtigung des Scripts selbst ist 755. Innerhalb des scripts konnte ich keinen Aufruf von fopen (mittels Textsuche) finden...

      Trotzdem erstmal danke.

      Gruß,
      Richard

      1. hi,

        Argl - wie ich sagte, ist das nicht mein Script und doch ca. 10.000 Zeilen groß...

        Da ist das etwas *nachlässig* programmiert, um das mal vorsichtig auszudrücken.

        Die Berechtigung des Scripts selbst ist 755. Innerhalb des scripts konnte ich keinen Aufruf von fopen (mittels Textsuche) finden...

        In Perl gibts ja auch kein "fopen". FileHandle werden mit open zum Leben erweckt. Btw., irgendwie muss auch schon der Verwendungszweck ein bissl was darüber verraten, was das Script macht.

        Nimm einen komfortablen Editor, mit dem Du Textmarken setzen, Zeilen nach Nummern anspringen und ordentlich suchen kannst, schalte -w ein und knöpf Dir den Patienten vor. Oder den Autor die Schlampe.

        Viel Glück,
        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
        1. Hi Hotte!

          Danke soweit.
          Was das Script macht:
          ssl proxy

          In Perl gibts ja auch kein "fopen". FileHandle werden mit open zum Leben erweckt. Btw., irgendwie muss auch schon der Verwendungszweck ein bissl was darüber verraten, was das Script macht.

          Dann kommt das wohl doch, wie Struppi sagt, vom Apache?

          Nimm einen komfortablen Editor, mit dem Du Textmarken setzen, Zeilen nach Nummern anspringen und ordentlich suchen kannst, schalte -w ein und knöpf Dir den Patienten vor. Oder den Autor die Schlampe.

          Das hat 2 Probleme:

          1. Tritt diese Meldung mit -w nicht auf
          2. Das ganze Teil ist nicht trivial - ich hatte bereits begonnen, zu versuchen, fehlende Inits nachzutragen, aber dann funktioniert das Script nicht mehr (shit: "funktioniert nicht"...)
            Ich wollte Sagen, dann scheint das Script insofern nicht mehr korrekt ausgeführt zu werden, dass dann auf einmal der Proxy header über der Seite fehlt.

          Da ist das etwas *nachlässig* programmiert, um das mal vorsichtig auszudrücken.

          Tja,einem geschenkten Gaul...

          Was soll's, dann wird halt wie blöd geloggt - das setz ich dann einfach zurück.

          Vielen Dank,
          Richard

          1. Hi,

            Was soll's, dann wird halt wie blöd geloggt - das setz ich dann einfach zurück.

            Klar, wenns erstmal läuft... Du ich hab hier auch Scripts die ich irgendwann mal hingehauen habe, wenn die einmal laufen tu ich mich auch schwer die zu "verbessern".

            Viele Grüße,
            Hotte

            --