httpd: error 500 mit einem C-Programm / SlowCGI

C

CrimsonKing

Guest
Folgende Problemstellung:
  • OpenBSD-Server mit httpd im üblichen chroot.
  • Ein kleines C-Programm, das, wenn ich ./testprogramm eingebe, auch brav HTML-Code ausspuckt, per SlowCGI via Alias-Unterordner (meinedomain.net/test) ins Web gehängt. (Ist nicht das erste, meinedomain.net ist ebenfalls im Wesentlichen ein kleines C-Programm, dieses verrichtet aber auch anstandslos seinen Dienst.)
  • Erster Versuch: Fehler 500, libc.so.88.0 not found. Diese Datei in den chroot kopiert. (Den Fehler hatte ich früher schon mal. Lernen durch Schmerz...)
  • Weitere Versuche, nun mit offenbar vollständiger Bibliothekssammlung im chroot: Fehler 500, nichts im error.log. Dafür krieg' ich aber einen Core-Dump.
  • httpd unzählige Male neu gestartet - keine Verbesserung.
testprogramm hat chmod 0755 und gehört root:daemon. [Nachtrag: Ist jetzt kein Hardlink mehr, eine Fehlerquelle weniger.]

Ich habe also ein funktionierendes Programm, das plötzlich einen Absturz wirft, wenn der Webserver es ausführt.
Wo muss ich suchen? :confused:
 
Laut Backtrace schlägt malloc() in der libc fehl, sobald ich versuche, was auszugeben:

Code:
puts("Status: 200 OK\r\n");

Genau diese Zeile stört meine andere C-Webanwendung aber nicht im Geringsten. :grumble:
 
Hast Du schon probiert, Deine C-Webanwendung statisch zu linken oder testweise den httpd ohne chroot zu starten?
 
Ich denke, da fehlt dir im chroot irgendwas zu malloc. Schau mal auf deinem Host, ob eine /etc/malloc.conf existiert.

Rob
 
Vermutlich liegt es am Standort deiner libs. Wenn dein chroot z.B. /var/www ist, könntest Du evtl. mal versuchen, deine libs unter /var/www/usr/.../deinLibsPfad/libfoo.so zu speichern. Libs im chroot sind und waren schon immer irgendwie problematisch. Wenn die libs noch von anderen libs abhängen, wirds noch problematischer.
 
Da hatte ich eigentlich schon alle möglichen Libs hingetan. Hatte beim Mal davor ja auch funktioniert. Sehr ärgerlich.
Oder kann man die libc statisch linken und die Anwendung dann dynamisch mit ihr?
 
Gute Frage. Was mich hier wundert ist, dass es vorher funktioniert hat und nun nicht mehr. Ab diesem Punkt weiß ich leider auch nicht mehr weiter.

Auch https://kristaps.bsd.lv/kcgi/ schreibt, dass man die binaries bei Verwendung von chroot statisch linken sollte. Schon sehr strange alles.
 
Naja, das andere C-Ding verwendet eine ältere libc, ist noch mit 5.9 kompiliert worden. Vielleicht deswegen? :D

Na gut, nehme ich statisches Linken halt als Workaround. Ungern...
Danke trotzdem!
 
Ich sehe keinen Sinn darin, mit jedem OS-Update meine Software neu zu kompilieren. Die libc läuft ja nicht weg. Aktuell läuft 6.0... :)
 
Nicht wenigstens einmal, um zu sehen, ob das Problem bestehenbleibt? Lieber Ratestunde im Forum? Komischer Ansatz. :)
 
Das Problem besteht ja nur mit der Anwendung, die ich zum ersten Mal unter 6.0 überhaupt kompiliert habe... die 5.9er läuft auch unter 6.0 noch hervorragend. :grumble:
 
Ich habe seit 140 Tagen (letzter Reboot) nichts Neues im dmesg stehen.
 
Zurück
Oben