pandorafms/pandora_plugins/OpenLDAP/Ldap entry/check_ldap_dn.pl

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";
}