/[cvs]/nfo/perl/libs/Data/Storage/Handler/NetLDAP.pm
ViewVC logotype

Contents of /nfo/perl/libs/Data/Storage/Handler/NetLDAP.pm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.2 - (show annotations)
Mon Jan 20 16:46:09 2003 UTC (21 years, 5 months ago) by joko
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +57 -17 lines
- doesn't use global '$ldap' as ldap-connection-handle any more - now using '$self->{_COREHANDLE}'
+ sub getCOREHANDLE
+ sub createChildNode

1 ## ------------------------------------------------------------------------
2 ## $Id$
3 ## ------------------------------------------------------------------------
4 ## $Log$
5 ## ------------------------------------------------------------------------
6
7
8 package Data::Storage::Handler::NetLDAP;
9
10 use strict;
11 use warnings;
12
13 # Data::Storage::Handler
14 use base qw(
15 Data::Storage::Handler::Abstract
16 DesignPattern::Bridge
17 );
18
19
20 use Data::Dumper;
21 use Net::LDAP;
22 use Net::LDAP::Entry;
23 #use Net::LDAP::Search;
24
25 use Data::Identifier::Dn;
26
27 # get logger instance
28 my $logger = Log::Dispatch::Config->instance;
29
30
31 # the (package) global ldap-connection-handler
32 #my $self->{_COREHANDLE};
33
34 # TODO: implement this!
35 my $TRACELEVEL = 0;
36 my $logfile_errors = '../log/ldap_errors.log';
37
38
39 sub getMetaInfo {
40 my $self = shift;
41 $logger->debug( __PACKAGE__ . "->getMetaInfo()" );
42 return {
43 'disconnectMethod' => 'disconnect',
44 };
45 }
46
47 sub _init {
48 my $self = shift;
49 #print "!!!!!!!!!!! _init", "\n";
50 $self->load("Extensions");
51 }
52
53 sub connect {
54
55 my $self = shift;
56
57 #print "connect!", "\n";
58
59 #print Dumper($self);
60
61 my $dsn = $self->{locator}->{dsn};
62 $logger->debug( __PACKAGE__ . "->connect( dsn $dsn )" );
63
64 $self->{locator}->{connInfo} = $self->_getConnectionInfo($dsn);
65
66 if (!$self->{locator}->{connInfo}->{host}) {
67 $logger->critical( __PACKAGE__ . '->_getConnectionInfo: dsn-error: no host' );
68 return;
69 }
70 $self->{locator}->{connInfo}->{port} ||= '389';
71
72 #print Dumper($self);
73
74 $self->{_COREHANDLE} = Net::LDAP->new(
75 $self->{locator}->{connInfo}->{host},
76 port => $self->{locator}->{connInfo}->{port},
77 #timeout => 120,
78 debug => 0,
79 #async => 1,
80 #onerror => 'warn',
81 onerror => \&_ldapError,
82 #version => 3,
83 )
84 or do {
85 my $message = {
86 error => 'could not connect to server at ' . $self->{locator}->{connInfo}->{host} . ':' . $self->{locator}->{connInfo}->{port},
87 code => 'none',
88 };
89 #$logger->error(__PACKAGE__ . "->connect: LDAP-ERROR: ");
90 #$self->log("could not connect to ldap-server!");
91 _ldapError($message);
92 return;
93 };
94
95 #$self->{_COREHANDLE} =
96 $self->{_COREHANDLE}->bind(
97 $self->{locator}->{connInfo}->{binddn},
98 password => $self->{locator}->{connInfo}->{pass}
99 ) or die "$@";
100
101 $self->{locator}->{status}->{connected} = 1;
102
103 #print "ok", "\n";
104
105 return 1;
106
107 }
108
109 sub _getConnectionInfo {
110 my $self = shift;
111 my $dsn = shift;
112 $dsn =~ m/host=(.+?);binddn=(.+?);pass=(.+?)$/;
113 my $args = {
114 host => $1,
115 binddn => $2,
116 pass => $3,
117 };
118 $args->{binddn} =~ s/'//g if $args->{binddn};
119 return $args;
120 }
121
122 sub existsChildNode {
123 my $self = shift;
124
125 #print "\n", "==== existsChildNode", "\n";
126 #exit;
127
128 my $nodeName = shift;
129
130 $logger->debug( __PACKAGE__ . "->existsChildNode( basedn='$self->{locator}->{basedn}', nodeName='$nodeName' )" );
131
132 my $nodeDn = Data::Identifier::Dn->new(base => $self->{locator}->{basedn}, type => 'ou', name => $nodeName);
133 my $nodeDn_asString = $nodeDn->asString();
134
135 my $filter = "(objectClass=*)";
136
137 #{
138 my $mesg = $self->{_COREHANDLE}->search(
139 base => $nodeDn_asString,
140 filter => $filter,
141 );
142 #}
143
144 #return;
145
146 #print "search-result-code: ", $mesg->code, "\n";
147 #print "search-result-error: ", $mesg->error, "\n";
148 # print "LDAP-error: ", $mesg->{errorMessage}, "\n" if $mesg->{errorMessage};
149
150 #return;
151 #print Dumper($mesg);
152 #exit;
153
154 #$mesg->code && die $mesg->error;
155
156 return 1 if exists $mesg->{entries};
157 return 0;
158
159 }
160
161 sub disconnect {
162 my $self = shift;
163 $self->{_COREHANDLE}->unbind; # take down session
164 }
165
166 sub _ldapError {
167 my $message = shift;
168 #print Dumper($message);
169 my $textMessage = "LDAP-ERROR: " . $message->error . " - code: " . $message->code;
170 $textMessage .= " - dn: " . $message->{matchedDN} if $message->{matchedDN};
171 #print "msg: '$textMessage'", "\n";
172 #a2f($logfile_errors, $textMessage) if !$TRACELEVEL;
173 $logger->error($textMessage);
174 return $message;
175 }
176
177 sub getCOREHANDLE {
178 my $self = shift;
179 return $self->{_COREHANDLE};
180 }
181
182 sub createChildNode {
183 my $self = shift;
184 my $nodeName = shift;
185 #print "createChildNode: $nodeName", "\n";
186 my $nodeDn = Data::Identifier::Dn->new(base => $self->{locator}->{basedn}, type => 'ou', name => $nodeName);
187 return $self->createDn($nodeDn);
188 }
189
190 1;

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed