Net::LDAP::Batch::Action::Delete - delete entry from LDAP server


Net-LDAP-Batch documentation Contained in the Net-LDAP-Batch distribution.

Index


Code Index:

NAME

Top

Net::LDAP::Batch::Action::Delete - delete entry from LDAP server

SYNOPSIS

Top

 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;




DESCRIPTION

Top

Deletes an entry from a LDAP server, restoring it on failure of any kind.

METHODS

Top

init

Override base method to check that search() param is set to an array ref.

execute

Perform the action. Will croak() if search() fails to match.

rollback

Revert the deletion by calling ldap->add for the original Net::LDAP::Entry object.

AUTHOR

Top

Peter Karman, <karman at cpan.org>

BUGS

Top

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.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Net::LDAP::Batch

You can also look for information at:

* AnnoCPAN: Annotated CPAN documentation

http://annocpan.org/dist/Net-LDAP-Batch

* CPAN Ratings

http://cpanratings.perl.org/d/Net-LDAP-Batch

* RT: CPAN's request tracker

http://rt.cpan.org/NoAuth/Bugs.html?Dist=Net-LDAP-Batch

* Search CPAN

http://search.cpan.org/dist/Net-LDAP-Batch

ACKNOWLEDGEMENTS

Top

The Minnesota Supercomputing Institute http://www.msi.umn.edu/ sponsored the development of this software.

COPYRIGHT

Top

SEE ALSO

Top

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__