cgi - Problem

Status
Für weitere Antworten geschlossen.

oldtizian

Benutzer
Mitglied seit
11. Dez 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Servus miteinander!

Ich habe seit einiger Zeit ein Problem, das ich bisher umgehen konnte. Leider geht das nun nicht mehr.

Meine cgi/Perl Programme laufen auf dem Webserver meiner DS-108j nicht.
Beim Aufruf kommt immer die Synology-Standard-Fehlerseite.
Ich weder Apache- noch Linux-Spezialist, will es auch nicht werden. Deshalb - mit der Bitte um Hilfe der Spezialisten - hier die FActs, soweit ich sie kenne:
1. Alle File haben 755 und gehören der Gruppe "admin useres"
2. httpd-error-user.log sagt folgendes:
[Thu Dec 11 10:23:57 2008] [error] [client 192.168.2.102] (2)No such file or directory: exec of '/var/services/web/cgi-bin/test.cgi' failed
[Thu Dec 11 10:23:57 2008] [error] [client 192.168.2.102] Premature end of script headers: test.cgi
3. Daraufhin habe ich mich auf das "Premature end of script headers" gestürzt und festgestellt, dass an allen Zeilenenden als CR/LF ein "^M" steht.
Bei html-files macht dies offenabr nichts aus, cgi´s nehmen es wohl überl. Denn wenn man nach der Zeile "#!/usr/bin/perl" das "^M" löscht furtzt das Programm.

Frage:
Woher kommt das "^M" und wie kriege ich es wieder weg? Ist das eine Apache Einstellung?
PS: Natürlich weden die Files im ASCII-Mode auf den Webserver gebeamt...

Merci vielmals,
Old Tizian
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Wo hast du die cgi Files erstellt? Auf einem Windows System? Du musst beim Speichern die Option Unix Zeilenendzeichen verwenden aktivieren.
Bei html Files haben die Zeilenenden keinen Einfluss, weil html auf dem Client ausgeführt wird. Da cgi's aber auf dem Server ausgeführt werden müssen auch die Zeilenendzeichen korrekt nach dem Serverbetriebssystem sein

Gruss

tobi
 

oldtizian

Benutzer
Mitglied seit
11. Dez 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Ich mach das meist unter Win mit dem Notepad.
Das komische ist aber, dass ich das gleiche Verzeichnis mit den gleichen (selben?) Dateien bei meinem Hoster auf den Server schiebe und es furtzt!

Dann müsste der Unterschied doch in den Einstellungen bei dem Apachen sein, oder?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich mach das meist unter Win mit dem Notepad.
Das komische ist aber, dass ich das gleiche Verzeichnis mit den gleichen (selben?) Dateien bei meinem Hoster auf den Server schiebe und es furtzt!

Dann müsste der Unterschied doch in den Einstellungen bei dem Apachen sein, oder?
Läuft denn der Server bei deinem Hoster auf einem IIS und Windows? Windows und Notepad ist aber bezüglich Unix Zeilenenden eine ziemlich schlechte Wahl. Schau dir mal Notepad++ für Windows an. Dort kann man beim Speichern sagen, welche Zeilenendzeichen verwendet werden sollen (Win/Mac/Nix)
Ich glaube nicht, dass dies eine Einstellungssache der Apachen ist. Vermutlich hat dein Provider sein Betriebssystem so eingestellt, dass es mit allen Zeilenendzeichen kann
 

oldtizian

Benutzer
Mitglied seit
11. Dez 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Das wäre ja die Frage: Wo stellt man ein, dass der Server mit allen Zeilenendzeichen kann?
Denn es ist für mich schier unmöglich alle Scripts anzufassen und die CR/LFs zu ändern.
Zumal mir bei dieser Theorie noch nicht klar ist, warum nur das Zeilenende der ersten Zeile kritisch ist, alle anderen aber offensichtlich nicht...

Der Hoster verwendet Apache/1.3 (Unix) mod_ssl/2.8.28 OpenSSL/0.9.8f AuthPG/1.3 unter LINUX
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Das Programm recode kann Files konvertieren.
Das Problem tritt bei der ersten Leerzeile auf, weil der Client wissen muss um was für Dateien es sich handelt. Dies wird ihm mittels header mitgeteilt. Gemäss RFC muss das Ende des Headers mit einer Leerzeile vom Beginn der Nutzdaten abgetrennt werden
Code:
#!/bin/bash
  # Ausgabe des Mime-Types mit Leerzeile
  echo Content-type: text/html
  echo
  # Jetzt die HTML-Seite
  echo "<TITLE>Ein erstes CGI-Script</TITLE>"
  echo "<BODY bgcolor=white>"
  echo "<H1>Hallo Welt</H1>"
  echo "</BODY>"
Eine Leerzeile entsprich letzendlich einem doppelten Zeilenendzeichen. Wenn der Server jetzt nicht feststellen kann wo die Grenze zwischen Header und Body ist fällt er auf die Schnauze, weil schlicht alles als Header angeschaut wird
 

oldtizian

Benutzer
Mitglied seit
11. Dez 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
@jahlives:
Erst mal vielen Dank für Deine Geduld mit mir!

Hab mit vi einfach mal die ersten ^M der Datei entfernt und sogar noch Leerzeile eingefügt.
Im Ergebnis hat scih nichts geändert, außer dass die fehlermeldung noch kryptischer wird:
[Thu Dec 11 17:07:56 2008] [error] Died at /var/services/web/cgi-bin/test.pl line 53.
[Thu Dec 11 17:07:56 2008] [error] Premature end of script headers: test.pl

... und wie gesagt, die orginale Datei läuft beim Hoster ohne Probleme ...
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Tipp doch mal den Beispielcode in eine Datei. Achte auf die korrekten Zeilenenden und teste den Code mal ob er funzt. Musst noch den Pfad zur Shell anpassen /usr/bin/sh oder /usr/bin/ash oder /opt/bin/bash wenn du dir Bash via ipkg installiert hast.
Was steht denn in test.pl auf Zeile 53?
 

oldtizian

Benutzer
Mitglied seit
11. Dez 2008
Beiträge
5
Punkte für Reaktionen
0
Punkte
0
Zunächst einmal:
Du lagst richtig.

Nach zähem testen stellt sich heraus, dass die Dateien korrekt ausgeführt werden, wenn das ^M durch LF ersetzt wird.
Das "die" in Zeile 53 war korrekt und das Ende einer Schleife.

Allerdings ist es nahezu unmöglich das ^M automatisiert in allen Fällen korrekt zu ersetzen.
Dies macht es wiederum unpraktikabel alle meine progs zu ändern.

==> ich suche weiter nach der Einstellung, die ein CR/LF auf dem Apachen toleriert.

Trotzdem vielen Dank für Deine Hilfe

CU, OldTizian
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat