3 | 3 |
use vars qw($VERSION);
|
4 | 4 |
use Net::LDAP;
|
5 | 5 |
|
6 | |
$VERSION = '0.3';
|
|
6 |
$VERSION = '0.4';
|
7 | 7 |
|
8 | 8 |
sub new {
|
9 | 9 |
my $class = shift;
|
|
14 | 14 |
my $self = shift;
|
15 | 15 |
my $session = shift;
|
16 | 16 |
$self->{args} = $session->{args};
|
|
17 |
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
|
|
18 |
$self->{args}->{ldapAttributeId} ||= 'cn';
|
|
19 |
$self->{args}->{ldapAttributeContent} ||= 'description';
|
17 | 20 |
|
18 | 21 |
my $msg = $self->ldap->add(
|
19 | |
"cn=$session->{data}->{_session_id}," . $self->{args}->{ldapConfBase},
|
|
22 |
$self->{args}->{ldapAttributeId} . "="
|
|
23 |
. $session->{data}->{_session_id} . ","
|
|
24 |
. $self->{args}->{ldapConfBase},
|
20 | 25 |
attrs => [
|
21 | |
objectClass => [ 'top', 'applicationProcess' ],
|
22 | |
cn => $session->{data}->{_session_id},
|
23 | |
description => $session->{serialized},
|
|
26 |
objectClass => $self->{args}->{ldapObjectClass},
|
|
27 |
$self->{args}->{ldapAttributeId} => $session->{data}->{_session_id},
|
|
28 |
$self->{args}->{ldapAttributeContent} => $session->{serialized},
|
24 | 29 |
],
|
25 | 30 |
);
|
26 | 31 |
|
|
32 | 37 |
my $self = shift;
|
33 | 38 |
my $session = shift;
|
34 | 39 |
$self->{args} = $session->{args};
|
|
40 |
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
|
|
41 |
$self->{args}->{ldapAttributeId} ||= 'cn';
|
|
42 |
$self->{args}->{ldapAttributeContent} ||= 'description';
|
35 | 43 |
|
36 | 44 |
my $msg = $self->ldap->modify(
|
37 | |
"cn=$session->{data}->{_session_id}," . $self->{args}->{ldapConfBase},
|
38 | |
replace => { description => $session->{serialized}, },
|
|
45 |
$self->{args}->{ldapAttributeId} . "="
|
|
46 |
. $session->{data}->{_session_id} . ","
|
|
47 |
. $self->{args}->{ldapConfBase},
|
|
48 |
replace =>
|
|
49 |
{ $self->{args}->{ldapAttributeContent} => $session->{serialized}, },
|
39 | 50 |
);
|
40 | 51 |
|
41 | 52 |
$self->ldap->unbind() && delete $self->{ldap};
|
|
46 | 57 |
my $self = shift;
|
47 | 58 |
my $session = shift;
|
48 | 59 |
$self->{args} = $session->{args};
|
|
60 |
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
|
|
61 |
$self->{args}->{ldapAttributeId} ||= 'cn';
|
|
62 |
$self->{args}->{ldapAttributeContent} ||= 'description';
|
49 | 63 |
|
50 | 64 |
my $msg = $self->ldap->search(
|
51 | |
base => "cn=$session->{data}->{_session_id},"
|
|
65 |
base => $self->{args}->{ldapAttributeId} . "="
|
|
66 |
. $session->{data}->{_session_id} . ","
|
52 | 67 |
. $self->{args}->{ldapConfBase},
|
53 | |
filter => '(objectClass=applicationProcess)',
|
|
68 |
filter => '(objectClass=' . $self->{args}->{ldapObjectClass} . ')',
|
54 | 69 |
scope => 'base',
|
55 | |
attrs => ['description'],
|
|
70 |
attrs => [ $self->{args}->{ldapAttributeContent} ],
|
56 | 71 |
);
|
57 | 72 |
|
58 | 73 |
$self->ldap->unbind() && delete $self->{ldap};
|
59 | 74 |
$self->logError($msg) if ( $msg->code );
|
60 | 75 |
|
61 | 76 |
eval {
|
62 | |
$session->{serialized} = $msg->shift_entry()->get_value('description');
|
|
77 |
$session->{serialized} = $msg->shift_entry()
|
|
78 |
->get_value( $self->{args}->{ldapAttributeContent} );
|
63 | 79 |
};
|
64 | 80 |
|
65 | 81 |
if ( !defined $session->{serialized} ) {
|
|
71 | 87 |
my $self = shift;
|
72 | 88 |
my $session = shift;
|
73 | 89 |
$self->{args} = $session->{args};
|
74 | |
|
75 | |
$self->ldap->delete(
|
76 | |
"cn=$session->{data}->{_session_id}," . $self->{args}->{ldapConfBase} );
|
|
90 |
$self->{args}->{ldapObjectClass} ||= 'applicationProcess';
|
|
91 |
$self->{args}->{ldapAttributeId} ||= 'cn';
|
|
92 |
$self->{args}->{ldapAttributeContent} ||= 'description';
|
|
93 |
|
|
94 |
$self->ldap->delete( $self->{args}->{ldapAttributeId} . "="
|
|
95 |
. $session->{data}->{_session_id} . ","
|
|
96 |
. $self->{args}->{ldapConfBase} );
|
77 | 97 |
|
78 | 98 |
$self->ldap->unbind() && delete $self->{ldap};
|
79 | 99 |
}
|
|
166 | 186 |
=head1 OPTIONS
|
167 | 187 |
|
168 | 188 |
This module requires one argument in the usual Apache::Session style. The
|
169 | |
keys ldapServer, ldapBase, ldapBindDN, ldapBindPassword are required. The key
|
170 | |
ldapPort is optional. Example:
|
|
189 |
keys ldapServer, ldapBase, ldapBindDN, ldapBindPassword are required. The keys
|
|
190 |
ldapPort, ldapObjectClass, ldapAttributeId, ldapAttributeContent are optional.
|
|
191 |
Example:
|
171 | 192 |
|
172 | 193 |
tie %s, 'Apache::Session::LDAP', undef,
|
173 | 194 |
{
|
174 | |
ldapServer => 'localhost',
|
175 | |
ldapBase => 'dc=example,dc=com',
|
176 | |
ldapBindDN => 'cn=admin,dc=example,dc=com',
|
177 | |
ldapBindPassword => 'pass',
|
|
195 |
ldapServer => 'localhost',
|
|
196 |
ldapBase => 'dc=example,dc=com',
|
|
197 |
ldapBindDN => 'cn=admin,dc=example,dc=com',
|
|
198 |
ldapBindPassword => 'pass',
|
|
199 |
ldapObjectClass => 'applicationProcess',
|
|
200 |
ldapAttributeId => 'cn',
|
|
201 |
ldapAttributeContent => 'description',
|
178 | 202 |
};
|
179 | 203 |
|
180 | 204 |
=head1 AUTHOR
|
|
184 | 208 |
=head1 COPYRIGHT AND LICENSE
|
185 | 209 |
|
186 | 210 |
Copyright (C) 2009, 2012 by Xavier Guimard
|
187 | |
Copyright (C) 2014 by Clement Oudot
|
|
211 |
Copyright (C) 2014, 2015 by Clement Oudot
|
188 | 212 |
|
189 | 213 |
This library is free software; you can redistribute it and/or modify
|
190 | 214 |
it under the same terms as Perl itself, either Perl version 5.10.0 or,
|