Authentifizierungsmodul mod_perl 2 Apache 2
Oliver
- perl
Hallo alle miteinander,
ich habe ein sehr verzwicktes Problem bei dem Umstieg von Apache 1.3 / mod_perl 1.0 zu Apache2 / mod_perl 2.0
Ich hatte für Apache 1.3 ein Perl-Modul gebastelt, dass alle Requests auf ein geschütztes Verzeichnis verarbeitet.
Dieses Modul Authcookie authentifiziet einen User über Abgleich der Benutzerdaten in einer DB, setzt ensprechende Cookies für
die Authentifizierung beim nächsten Request, zeigt ein Login Formular für nicht angemeldete Nutzer an oder einfach eine Fehlerseite.
Nach dem Umstieg auf Apache2 geht nun gar nichts mehr. Ich habe mich mittlerweile durch die Apache und mod_perl Doku gearbeitet und
konnte bereits viele Fehler bereinigen.
Httpd.conf mit Apache 1.3
<Directory "usr/www/cgi-bin">
SetHandler perl-script
PerlHandler Apache::Registry
Options +ExecCGI
PerlSendHeader On
AllowOverride Authconfig
Order allow,deny
Allow from all
Authname Authcookie
AuthType Authcookie
PerlAuthenHandler AuthCookie::handler
require valid-user
</Directory>
Httpd.conf mit Apache2 (schon geändert - hoffentlich korrekt)
<Directory "usr/www/cgi-bin">
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options +ExecCGI
PerlOptions +ParseHeaders
AllowOverride Authconfig
Order allow,deny
Allow from all
Authname Authcookie
AuthType Authcookie
PerlAuthenHandler AuthCookie::handler
require valid-user
</Directory>
Hier ein Auszug aus dem Authcookie Modul:
sub handler {
my $r=shift(@_);
...
my $status = checkUser($r);
return $status;
}
sub checkUser {
#sind cookies da, die denn user identifizieren?
# --> Ja
return OK;
## -> Nein
## hat der User Login Daten geschickt?
##- -> Ja , Login Daten auswerten
## Login Daten okay, cookies fürs nächste Mal setzen,
return OK;
# Nein, keine Login Daten -> zeige Login Formular an.
$r->content_type('text/plain');
my $temp = new HTMLTemplate("seite.html");
my %subs = ("message" => $text,);
$r->print($temp->substitute(%subs));
}
Das $r->print($temp->substitute(%subs)) statement führt nun zu konstanten Fehlern. Im error.log findet sich
(null): $r->print can't be called before the response phase at /usr/www/modules/AuthCookie.pm line 256.\n
Ich habe mitterweile die dunkle Vermutung, dass ich unter Apache2 mit dem PerlAuthenHandler Modul keine Ausgaben im Browser mehr machen
kann ($r->print()), sondern dass ich in httpd.conf PerlResponseHandler AuthcookieResponse::handler definieren müßte, um irgendwelche HTML Seiten auszugeben.
Ich hoffe, ich konnte das Problem einigermaßen verständlich formulieren und bekomme ein hilfreiche Antwort. Ich möchte nach Möglichkeit mein altes Modul behalten und nicht alles umschreiben.
Btw, ich 'muss' Apache2 benutzen .. :(
Hallo,
mod_perl2 will break your (mod_perl1) code.
<perl.apache.org>
gruss