Dancer-Plugin-LDAP
view release on metacpan or search on metacpan
lib/Dancer/Plugin/LDAP/Handle.pm view on Meta::CPAN
$old_ref = $self->dn_split($old_dn, hash => 1);
$new_ref = $self->dn_split($new_dn, hash => 1);
if (@$new_ref == 1) {
# got already relative DN
$new_rdn = $new_dn;
}
else {
# relative DN is first
$rdn = shift @$new_ref;
# check if it needs to move in the tree
# if ($self->compare($old_dn, $new_dn, 1)) {
# die "Different LDAP trees.";
# }
$new_rdn = join('+', map {$_=$rdn->{$_}} keys %$rdn);
}
$old_escaped = join(',', @$old_ref);
Dancer::Logger::debug("LDAP rename from $old_escaped to $new_rdn.");
# change distinguished name
$ldret = $self->moddn ($old_escaped, newrdn => $new_rdn);
if ($ldret->code) {
return $self->_failure('rename', $ldret);
}
# change attribute
# return $self->quick_update('');
shift @$old_ref;
return $self->dn_unescape(join(',', $new_rdn, @$old_ref));
}
=head2 base
Returns base DN, optionally prepending relative DN from @rdn.
ldap->base
ldap->base('uid=racke@linuxia.de');
=cut
sub base {
my $self = shift;
if (@_) {
# prepend path
return join(',', @_, $self->{dancer_settings}->{base});
}
return $self->{dancer_settings}->{base};
}
=head2 rebind
Rebind with credentials from settings.
=cut
sub rebind {
my ($self) = @_;
my ($ldret);
Dancer::Logger::debug("LDAP rebind to $self->{dancer_settings}->{bind}.");
$ldret = $self->bind($self->{dancer_settings}->{bind},
password => $self->{dancer_settings}->{password});
if ($ldret->code) {
Dancer::Logger::error('LDAP bind failed (' . $ldret->code . '): '
. $ldret->error);
return;
}
return $self;
}
=head2 dn_split $dn %options
=cut
sub dn_split {
my ($self, $dn, %options) = @_;
my (@frags, @dn_parts, @out, @tmp, $buf, $value);
# break DN up with regular expresssions
@frags = reverse(split(/,/, $dn));
$buf = '';
for my $f (@frags) {
@tmp = split(/=/, $f);
if ($buf) {
$value = "$tmp[1],$buf";
}
elsif (@tmp > 1) {
$value = $tmp[1];
}
else {
$value = $tmp[0];
}
if (@tmp > 1) {
if ($options{raw}) {
unshift @dn_parts, "$tmp[0]=" . $value;
}
else {
unshift @dn_parts, "$tmp[0]=" . escape_dn_value($value);
}
$buf = '';
}
else {
$buf = $value;
}
}
( run in 2.536 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )