| Net-LDAP-Batch documentation | Contained in the Net-LDAP-Batch distribution. |
Net::LDAP::Batch::Action::Delete - delete entry from LDAP server
use Net::LDAP::Batch::Action::Delete;
my $action = Net::LDAP::Batch::Action::Delete->new(
{
ldap => $net_ldap_object,
search => [
base => 'name=foo,dc=company,dc=com'
scope => 'base'
],
});
$action->execute or $action->rollback;
Deletes an entry from a LDAP server, restoring it on failure of any kind.
Override base method to check that search() param is set to an array ref.
Perform the action. Will croak() if search() fails to match.
Revert the deletion by calling ldap->add for the original Net::LDAP::Entry object.
Peter Karman, <karman at cpan.org>
Please report any bugs or feature requests to
bug-net-ldap-batch at rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-LDAP-Batch.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Net::LDAP::Batch
You can also look for information at:
The Minnesota Supercomputing Institute http://www.msi.umn.edu/
sponsored the development of this software.
Copyright 2008 by the Regents of the University of Minnesota. All rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Net::LDAP
| Net-LDAP-Batch documentation | Contained in the Net-LDAP-Batch distribution. |
package Net::LDAP::Batch::Action::Delete; use strict; use warnings; use Carp; use base qw( Net::LDAP::Batch::Action ); our $VERSION = '0.02'; __PACKAGE__->mk_accessors(qw( search ));
sub init { my $self = shift; $self->SUPER::init(@_); if ( $self->search and ref( $self->search ) ne 'ARRAY' ) { croak "search must be an ARRAY ref"; } return $self; }
sub execute { my $self = shift; my $entry; if ( $self->entry ) { $entry = $self->entry; } else { my $search = $self->search or croak "search required"; my $where = Data::Dump::dump($search); carp "deleting $where" if $self->debug; my $msg = $self->ldap->search(@$search); if ( $msg->count > 0 ) { $entry = $msg->entry(0); } else { # no match for search. # in SQL, this would just be a no-op, since WHERE failed. # but here we assume that caller expects the object to exist. croak "delete search failed to match $where:\n" . $self->get_ldap_err($msg); } } $self->entry( $entry->clone ); $entry->delete; my $msg = $entry->update( $self->ldap ); if ( $msg->code ) { croak "failed to delete entry: " . $self->get_ldap_err($msg); } $self->complete(1); return 1; }
sub rollback { my $self = shift; return 0 unless $self->complete; if ( !$self->entry ) { croak "cannot rollback deleted entry - no entry cached"; } carp "rolling back delete" if $self->debug; my $entry = $self->entry; my $msg = $self->ldap->add($entry); if ( $msg->code ) { croak "failed to rollback deletion of entry: " . $self->get_ldap_err($msg); } $self->complete(0); return 1; } 1; __END__