package My::LDAPConnect;
# $Id: LDAPConnect.pm,v 3.0 2002/08/28 01:16:32 lachoy Exp $
# Simple LDAP connection manager -- change %DATASOURCE as needed for testing
use strict;
use Carp qw( cluck );
$My::LDAPConnect::VERSION = sprintf("%d.%02d", q$Revision: 3.0 $ =~ /(\d+)\.(\d+)/);
my %HANDLES = ();
my %DATASOURCE = (
main => { host => 'localhost',
base_dn => 'dc=mycompany,dc=com' },
remote => { host => 'localhost',
port => 3890,
base_dn => 'dc=mycompany,dc=com' },
);
sub connection_info {
my ( $class, $connect_key ) = @_;
return \%{ $DATASOURCE{ $connect_key } };
}
sub global_datasource_handle {
my ( $class, $connect_key ) = @_;
cluck "Cannot retrieve handle without connect key!\n" unless ( $connect_key );
unless ( $HANDLES{ $connect_key } ) {
my $ldap_info = $class->connection_info( $connect_key );
$ldap_info->{port} ||= 389;
my $ldap = Net::LDAP->new( $ldap_info->{host},
port => $ldap_info->{port} );
unless ( $ldap ) { SPOPS::Exception->throw( "Cannot create LDAP connection: [$@]" ) }
my ( %bind_params );
if ( $ldap_info->{bind_dn} ) {
$bind_params{dn} = $ldap_info->{bind_dn};
$bind_params{password} = $ldap_info->{bind_password};
}
my $bind_msg = $ldap->bind( %bind_params );
if ( my $code = $bind_msg->code ) {
SPOPS::Exception::LDAP->throw(
"Cannot bind to directory: " . $bind_msg->error,
{ code => $code, action => 'global_datasource_handle' } );
}
$HANDLES{ $connect_key } = $ldap;
}
return $HANDLES{ $connect_key };
}
1;