Added methods to retrieve properties and recursive properties from the directory.
This commit is contained in:
parent
9e3f1c949e
commit
bd0d7b114a
1 changed files with 119 additions and 1 deletions
|
|
@ -58,7 +58,7 @@ sub bind {
|
||||||
my ($uri, $ldap, $auth, $result, $error);
|
my ($uri, $ldap, $auth, $result, $error);
|
||||||
|
|
||||||
if (defined $class->{_connection}) {
|
if (defined $class->{_connection}) {
|
||||||
return $class->{_connetcion};
|
return $class->{_connection};
|
||||||
}
|
}
|
||||||
|
|
||||||
my $ldapUrl = $class->{_ldapLink}->{ldapUrl};
|
my $ldapUrl = $class->{_ldapLink}->{ldapUrl};
|
||||||
|
|
@ -192,4 +192,122 @@ sub new {
|
||||||
bless {_ldapLinkId => $ldapLinkId, _ldapLink => $ldapLink }, $class;
|
bless {_ldapLinkId => $ldapLinkId, _ldapLink => $ldapLink }, $class;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
=head2 getProperty(dn,property)
|
||||||
|
|
||||||
|
Returns the results of a search on the property passed in
|
||||||
|
|
||||||
|
=head3 distinguished name of property
|
||||||
|
|
||||||
|
distinguished name of group to check users for
|
||||||
|
|
||||||
|
=head3 property
|
||||||
|
|
||||||
|
ldap property to retrieve from distinguished name
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub getProperty {
|
||||||
|
my $self = shift;
|
||||||
|
my $ldap = $self->bind;
|
||||||
|
my $dn = $_[0];
|
||||||
|
my $property = $_[1];
|
||||||
|
return [] unless($ldap && $dn && $property);
|
||||||
|
my $results = [];
|
||||||
|
my $msg = $ldap->search(
|
||||||
|
base => $dn,
|
||||||
|
scope => 'sub',
|
||||||
|
filter => "&(objectClass=*)"
|
||||||
|
);
|
||||||
|
if(!$msg->code && $msg->count > 0 ){
|
||||||
|
my $entry = $msg->entry(($msg->count)-1);
|
||||||
|
$results = $entry->get_value($property,asref => 1);
|
||||||
|
}
|
||||||
|
return $results;
|
||||||
|
}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
=head2 getRecursiveProperty(dn,property[,recursiveProperty])
|
||||||
|
|
||||||
|
Returns the results of a search on the property passed in
|
||||||
|
|
||||||
|
=head3 distinguished name of property
|
||||||
|
|
||||||
|
distinguished name of group to check users for
|
||||||
|
|
||||||
|
=head3 property
|
||||||
|
|
||||||
|
ldap property to retrieve from distinguished name
|
||||||
|
|
||||||
|
=head3 recursiveProperty
|
||||||
|
|
||||||
|
property to recursively search. If no recursive property is passed, the
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
#sub getRecursiveProperty {
|
||||||
|
# my $self = shift;
|
||||||
|
# my $ldap = $self->bind;
|
||||||
|
# my $dn = $_[0];
|
||||||
|
# my $property = $_[1];
|
||||||
|
# my $recProp = $_[2] || $property;
|
||||||
|
# return [] unless($ldap && $dn && $property);
|
||||||
|
# my $results = [];
|
||||||
|
# my $msg = $ldap->search(
|
||||||
|
# base => $dn,
|
||||||
|
# scope => 'sub',
|
||||||
|
# filter => "&(objectClass=*)"
|
||||||
|
# );
|
||||||
|
# if(!$msg->code && $msg->count > 0 ){
|
||||||
|
# my $entry = $msg->entry(($msg->count)-1);
|
||||||
|
# $self->recurseProperty($entry,$users,$property,$recProp,0);
|
||||||
|
# }
|
||||||
|
# return $results;
|
||||||
|
#}
|
||||||
|
|
||||||
|
#-------------------------------------------------------------------
|
||||||
|
=head2 recurseProperty(base,array,property,alternateKey)
|
||||||
|
|
||||||
|
Returns the whether or not the user is in a particular group
|
||||||
|
|
||||||
|
=cut
|
||||||
|
|
||||||
|
sub recurseProperty {
|
||||||
|
my $self = shift;
|
||||||
|
my $ldap = $self->bind;
|
||||||
|
my $base = $_[0];
|
||||||
|
my $array = $_[1] || [];
|
||||||
|
my $property = $_[2];
|
||||||
|
my $recProperty = $_[3] || $property;
|
||||||
|
my $count = $_[4] || 0;
|
||||||
|
return unless($ldap && $base && $property);
|
||||||
|
|
||||||
|
#Prevent infinate recursion
|
||||||
|
$count++;
|
||||||
|
return if $count == 99;
|
||||||
|
|
||||||
|
#search the base
|
||||||
|
my $msg = $ldap->search(
|
||||||
|
base => $base,
|
||||||
|
scope => 'sub',
|
||||||
|
filter => "&(objectClass=*)"
|
||||||
|
);
|
||||||
|
#return if nothing found
|
||||||
|
return if($msg->code || $msg->count == 0);
|
||||||
|
#loop through the results
|
||||||
|
for (my $i = 0; $i < $msg->count; $i++) {
|
||||||
|
my $entry = $msg->entry($i);
|
||||||
|
#push all the values stored in the property on to the array stack
|
||||||
|
my $properties = $entry->get_value($property,asref => 1);
|
||||||
|
push(@{$array},@{$properties});
|
||||||
|
#Loop through the recursive keys
|
||||||
|
if($property ne $recProperty) {
|
||||||
|
$properties = $entry->get_value($recProperty,asref => 1);
|
||||||
|
}
|
||||||
|
foreach my $prop (@{$properties}) {
|
||||||
|
$self->recurseProperty($prop,$array,$property,$recProperty,$count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
1;
|
1;
|
||||||
Loading…
Add table
Add a link
Reference in a new issue