Subclassing Apache::AuthDBI

Subclassing Apache::AuthDBI

am 07.12.2009 02:59:24 von Tosh Cooey

I'm trying to subclass Apache::AuthDBI by doing:

package MyAuthDBI;

use base "Apache::AuthDBI";
1;


Then in apache.conf

PerlModule MyAuthDBI

AuthType Basic
PerlAuthenHandler MyAuthDBI::authen
....


I'm getting the following error:

....failed to resolve handler `MyAuthDBI::authen': Can't locate
MyAuthDBI/authen.pm in @INC...

Which kinda makes sense as an error message since the handler is
declared MyAuthDBI::authen and not MyAuthDBI->authen and yet it works
just fine if I allow Apache::AuthDBI to handle the Authen.

Is it non trivial to subclass Apache::AuthDBI? Am I doing something
glaringly dumb?

Thanks again...

Tosh

--
McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/

Re: Subclassing Apache::AuthDBI

am 08.12.2009 23:19:37 von Tosh Cooey

I'm enjoying talking to myself here all month! So the solution to my
problem below...

Yay to MidLifeXis on PerlMonks for pointing out the problem.

When MyAuthDBI::authen is called then PERL looks to that specific object
for the function rather than traversing up the parent tree.
MyAuthDBI->authen would call the function but the original
Apache::AuthDBI::authen expects $r as the first argument and not $self
and so a new set of problems arises.

So the easy solution to this problem is:

package MyAuthDBI;
use base "Apache::AuthDBI";
sub authen {
my ($r) = @_;
Apache::AuthDBI::authen($r);
}
1;

To answer my final question, yes I was doing something glaringly dumb :)

Tosh


Tosh Cooey wrote:
> I'm trying to subclass Apache::AuthDBI by doing:
>
> package MyAuthDBI;
>
> use base "Apache::AuthDBI";
> 1;
>
>
> Then in apache.conf
>
> PerlModule MyAuthDBI
>
> AuthType Basic
> PerlAuthenHandler MyAuthDBI::authen
> ...
>

>
> I'm getting the following error:
>
> ...failed to resolve handler `MyAuthDBI::authen': Can't locate
> MyAuthDBI/authen.pm in @INC...
>
> Which kinda makes sense as an error message since the handler is
> declared MyAuthDBI::authen and not MyAuthDBI->authen and yet it works
> just fine if I allow Apache::AuthDBI to handle the Authen.
>
> Is it non trivial to subclass Apache::AuthDBI? Am I doing something
> glaringly dumb?
>
> Thanks again...
>
> Tosh
>

--
McIntosh Cooey - Twelve Hundred Group LLC - http://www.1200group.com/