You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by John Russell <jb...@onlywebdata.com> on 2006/03/31 20:10:37 UTC
MP2 PerlAuthenHandler and Apache2::Access
Hi,
I'm trying to migrate from MP1 to MP2 and having trouble with
get_basic_auth_pw and note_basic_auth_failure
which can not be found ..
<Location /db>
...
AuthName Database
AuthType Basic
PerlAuthenHandler Xdb::AuthOra2->handler
require valid-user
PerlResponseHandler Xdb::ApacheDB->handler
SetHandler perl-script
</Location>
package Xdb::AuthOra2;
use strict;
use Apache2::Access ();
#use Apache2::RequestUtil ();
use Apache2::Const -compile => qw (OK DECLINED REDIRECT
HTTP_UNAUTHORIZED);
use Apache2::ServerUtil ();
#use APR::URI ();
#use Apache2::RequestRec();
sub handler {
my $q = shift;
# get_basic_auth_pw not being found, temporarily comment out
#my ($status, $sent_pw) = $q->get_basic_auth_pw();
#return $status unless $status == Apache2::Const::OK;
my $sent_pw = 'scott';
my $user = 'tiger';
#my $user = $q->user();
unless ($user and $sent_pw) {
$q->note_basic_auth_failure;
#$q->log_reason("Both a username and password must be provided",
# $q->filename);
return Apache2::Const::HTTP_UNAUTHORIZED;
}
my $reason = authenticate($q, $user, $sent_pw);
if ($reason) {
$q->note_basic_auth_failure;
#$q->log_reason($reason, $q->filename);
return Apache2::Const::HTTP_UNAUTHORIZED;
}
return Apache2::Const::OK;
}
sub authenticate {
my $r = shift;
my $username = shift;
my $password = shift;
my $authok;
...
if ($authok != 1) {
return "Your request was not authorized.\n";
}
}
1;
__END__
this fails at run time with
Can't locate object method "note_basic_auth_failure" via package
"Xdb::AuthOra2" at /home/httpd/ph/Xdb/AuthOra2.pm line 34.
The module appears to be present
# find /usr/lib/perl5 -name Access.pm
/usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi/Apache2/Access.pm
# ls /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi/auto/
Apache2/Access
Access.bs Access.so
Any suggestions why the Apache2::Access functions are unavailable
would be most helpful, TIA.
John.
Re: MP2 PerlAuthenHandler and Apache2::Access
Posted by Tom Schindl <to...@gmx.at>.
Isn't the first object passed the class it self if you use method-style.
The error message seems to say this ;-)
sub handler {
my $self = shift;
my $r = shift;
...
}
Tom
John Russell wrote:
> Hi,
>
> I'm trying to migrate from MP1 to MP2 and having trouble with
>
> get_basic_auth_pw and note_basic_auth_failure
>
> which can not be found ..
>
> <Location /db>
> ...
> AuthName Database
> AuthType Basic
> PerlAuthenHandler Xdb::AuthOra2->handler
> require valid-user
> PerlResponseHandler Xdb::ApacheDB->handler
> SetHandler perl-script
> </Location>
>
>
> package Xdb::AuthOra2;
>
> use strict;
>
> use Apache2::Access ();
> #use Apache2::RequestUtil ();
> use Apache2::Const -compile => qw (OK DECLINED REDIRECT
> HTTP_UNAUTHORIZED);
> use Apache2::ServerUtil ();
> #use APR::URI ();
> #use Apache2::RequestRec();
>
> sub handler {
> my $q = shift;
>
> # get_basic_auth_pw not being found, temporarily comment out
> #my ($status, $sent_pw) = $q->get_basic_auth_pw();
> #return $status unless $status == Apache2::Const::OK;
>
> my $sent_pw = 'scott';
> my $user = 'tiger';
>
> #my $user = $q->user();
>
> unless ($user and $sent_pw) {
> $q->note_basic_auth_failure;
> #$q->log_reason("Both a username and password must be provided",
> # $q->filename);
> return Apache2::Const::HTTP_UNAUTHORIZED;
> }
>
> my $reason = authenticate($q, $user, $sent_pw);
>
> if ($reason) {
> $q->note_basic_auth_failure;
> #$q->log_reason($reason, $q->filename);
> return Apache2::Const::HTTP_UNAUTHORIZED;
> }
> return Apache2::Const::OK;
> }
>
> sub authenticate {
>
> my $r = shift;
> my $username = shift;
> my $password = shift;
>
> my $authok;
>
> ...
>
> if ($authok != 1) {
> return "Your request was not authorized.\n";
> }
>
> }
>
>
> 1;
> __END__
>
>
> this fails at run time with
>
> Can't locate object method "note_basic_auth_failure" via package
> "Xdb::AuthOra2" at /home/httpd/ph/Xdb/AuthOra2.pm line 34.
>
> The module appears to be present
>
> # find /usr/lib/perl5 -name Access.pm
> /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi/Apache2/Access.pm
>
> # ls /usr/lib/perl5/site_perl/5.8.6/i386-linux-thread-multi/auto/
> Apache2/Access
> Access.bs Access.so
>
> Any suggestions why the Apache2::Access functions are unavailable
> would be most helpful, TIA.
>
> John.
>
>
>