package Apache::MyHandler; ################################## # Apache Basic Auth # Handler file -Apache/MyHandler.pm # # Order allow,deny # Allow from all # AuthType Basic # AuthName "Nagios GUI" # PerlAuthenHandler Apache::MyHandler # Require valid-user # ################################## use strict; use Apache2::Const qw(:common); use Apache2::Access; use Apache2::RequestRec; use Apache2::Log; use strict; use warnings; use Net::LDAP; use IO::Socket; use Digest::MD5 qw(md5); sub MyAuth { my ($login_user,$login_pass)=@_; my $socketfile ="/var/run/ldapcached.sock"; no warnings 'uninitialized'; my $cache_me='yes'; if ( $cache_me eq 'yes' ) { if ( -S $socketfile ) { my $client = IO::Socket::UNIX->new(Peer => $socketfile, Type => SOCK_STREAM ) or die $!; ## send data to unix socket print $client "$login_user =!= $login_pass\n";; $client->flush; chomp(my $result = <$client>); $client->close; if ($result eq "Pass") {return "Passed";} else { return "Failed";} } { return "Failed"; } } } ##################### sub handler { my $r = shift; my($res, $sent_pw) = $r->get_basic_auth_pw; return $res if $res != OK; #my $user = $r->connection->user; my $user = $r->user; unless($user and $sent_pw) { $r->note_basic_auth_failure; $r->log_reason("Please provide username and password",$r->filename); return AUTH_REQUIRED; } if (MyAuth($user,$sent_pw) eq "Failed") { $r->note_basic_auth_failure; return AUTH_REQUIRED;}; return OK; } 1;