Fixed some errors. Here comes the working version:

---------

package Apache::AuthMulti;

# Stathy G. Touloumis
# Marcel M. Weber
# Darren Chamberlain
#
# Version 0.1.0 / 2002.02.13 / Marcel M. Weber

use     strict;
use     Apache::Constants qw(:common);

sub handler {
         my $r = shift;
         my($res, $sent_pw) = $r->get_basic_auth_pw;
         return $res if $res != OK;

         my @auth_modules=$r->dir_config->get("AuthModules");

         for my $am (@auth_modules)
         {
         load($am);
         if ($@){
                 $r->log_reason("Error loading module '$am':$@");
                 next;
         }

         my $handler = \&{"$am\::handler"};
         if ($handler->($r) == OK) {
                 $r->warn("$am return OK");
                 return OK;
         }

         $r->log_reason("$am not OK");
         }

         $r->note_basic_auth_failure;
         $r->log_reason("none of the handlers could authenticate this 
user");
         return AUTH_REQUIRED;
}

sub load {
     my $module=@_[0];
     $module  =~ s[::][/]g;
     $module .= '.pm';

     eval { require $module; };

     return $@ ? 1 : 0;
}

1;
__END__


-------------------

In the httpd.conf you have to put something like this:

<Location /test>
    AuthName Test
    AuthType Basic
   # These are AuthenSmb specific
    PerlSetVar myPDC SAMBA
    PerlSetVar myDOMAIN ARBEITSGRUPPE
  # With PerlAddVar you pass an array
    PerlAddVar AuthModules Apache::AuthSybase
    PerlAddVar AuthModules Apache::AuthenSmb
    PerlAuthenHandler Apache::AuthMulti
    require valid-user
</Location>

-----------------------

Works perfect...

Why not submitting this somewhere? I think this could be usefull for 
quite a lot of people. I think this is cool, as you do not have to worry 
wether the module returns DECLINED or AUTH_REQUIRED.

Marcel


Am Mittwoch den, 13. Februar 2002, um 15:02, schrieb darren chamberlain:

> Quoting Marcel Weber <[EMAIL PROTECTED]> [12 Feb-02 16:15]:
>> I don't get the point why it did not work the other way round,
>> but now everything is just fine now :
>
> Make it a little more generic:
>
> package Apache::MultiAuthen;
>
> use strict;
> use Apache::Constants qw(:common);
>
> sub handler {
>     my $r = shift;
>     my($res, $sent_pw) = $r->get_basic_auth_pw;
>     return $res if $res != OK;
>
>     # Tweak this; unsure about dir_config returning an array
>     my @auth_modules = $r->dir_config("AuthModules");
>
>     for my $am (@auth_modules) {
>         load($am);
>
>         if ($@) {
>             $r->log("Error loading module '$am': $@");
>             next;
>         }
>
>         my $handler = \&{"$am\::handler"};
>         if ($handler->($r) == OK) {
>             $r->log_reason("$am return OK");
>             return OK
>         }
>
>         $r->log_reason("$am not OK");
>     }
>
>     $r->note_basic_auth_failure;
>     return AUTH_REQUIRED;
> }
>
> sub load {
>     my $module = @_;
>     $module  =~ s[::][/]g;
>     $module .= '.pm';
>
>     eval { require $module; };
>
>     return $@ ? 1 : 0;
> }
>
> 1;
>
> __END__
>
> (darren)
>
> --
> Never attribute to malice that which is adequately explained by
> incompetence.
>     -- Napolean Bonaparte
>
>
-------------------

PGP / GPG Key:  http://www.ncpro.com/GPG/mmweber-at-ncpro-com.asc

Reply via email to