118 lines
2.7 KiB
Perl
118 lines
2.7 KiB
Perl
#!/usr/bin/perl -w
|
|
#--------------------------------------------------------------------
|
|
# Plugin server designed for PandoraFMS (www.pandorafms.org)
|
|
# Checks if a DN is in an LDAP Server
|
|
#
|
|
# Copyright (C) 2013 mario.pulido@artica.es
|
|
#--------------------------------------------------------------------
|
|
|
|
use strict;
|
|
use Net::LDAP;
|
|
use Getopt::Std;
|
|
|
|
#--------------------------------------------------------------------
|
|
# Global parameters
|
|
#--------------------------------------------------------------------
|
|
my ( $host, $port, $binddn, $bindpw, $dn ) = &options;
|
|
my $timeout = 5;
|
|
my $version = 3;
|
|
|
|
#--------------------------------------------------------------------
|
|
# Main program
|
|
#--------------------------------------------------------------------
|
|
|
|
main();
|
|
|
|
sub main {
|
|
|
|
# LDAP Connection
|
|
|
|
my $ldap = Net::LDAP->new(
|
|
$host,
|
|
port => $port,
|
|
version => $version,
|
|
timeout => $timeout
|
|
);
|
|
|
|
unless ($ldap) {
|
|
print "LDAP Critical : Pb with LDAP connection\n";
|
|
}
|
|
|
|
# Bind
|
|
|
|
if ( $binddn && $bindpw ) {
|
|
|
|
# Bind witch credentials
|
|
|
|
my $req_bind = $ldap->bind( $binddn, password => $bindpw );
|
|
|
|
if ( $req_bind->code ) {
|
|
print "LDAP Unknown : Bind Error "
|
|
. $req_bind->code . " : "
|
|
. $req_bind->error . "\n";
|
|
}
|
|
}
|
|
|
|
else {
|
|
|
|
# Bind anonymous
|
|
|
|
my $req_bind = $ldap->bind();
|
|
|
|
if ( $req_bind->code ) {
|
|
print "LDAP Unknown : Bind Error "
|
|
. $req_bind->code . " : "
|
|
. $req_bind->error . "\n";
|
|
}
|
|
}
|
|
|
|
# Base Search
|
|
|
|
my $req_search = $ldap->search(
|
|
base => $dn,
|
|
scope => 'base',
|
|
filter => 'objectClass=*',
|
|
attrs => ['1.1']
|
|
);
|
|
|
|
if ( $req_search->code == 32 ) {
|
|
|
|
# No such object Error
|
|
print "LDAP Critical : $dn not present\n";
|
|
$ldap->unbind();
|
|
}
|
|
|
|
elsif ( $req_search->code ) {
|
|
print "LDAP Unknown : Search Error "
|
|
. $req_search->code . " : "
|
|
. $req_search->error . "\n";
|
|
$ldap->unbind();
|
|
}
|
|
|
|
else {
|
|
print "OK\n";
|
|
$ldap->unbind();
|
|
}
|
|
|
|
}
|
|
|
|
sub options {
|
|
|
|
# Get and check args
|
|
my %opts;
|
|
getopt( 'HpDWb', \%opts );
|
|
&usage unless ( exists( $opts{"H"} ) );
|
|
&usage unless ( exists( $opts{"b"} ) );
|
|
$opts{"p"} = 389 unless ( exists( $opts{"p"} ) );
|
|
$opts{"D"} = 0 unless ( exists( $opts{"D"} ) );
|
|
$opts{"w"} = 0 unless ( exists( $opts{"W"} ) );
|
|
return ( $opts{"H"}, $opts{"p"}, $opts{"D"}, $opts{"W"}, $opts{"b"} );
|
|
}
|
|
|
|
sub usage {
|
|
|
|
# Print Help/Error message
|
|
print
|
|
"LDAP Unknown : Usage :\n$0 -H hostname [-p port] [-D binddn -W bindpw] -b dn\n";
|
|
}
|