From: Graham B. <gb...@po...> - 2000-08-17 12:42:52
|
On Thu, Aug 17, 2000 at 01:15:50PM +0100, John Berthels wrote: > On Wed, 16 Aug 2000, John Berthels wrote: > > > > > > > > You must delete all children entries first before you can delete any > > > parent entries. > > > > Net::LDAP::Util::ldap_delete_tree anyone? > > > This one return true/false and sets $!. I realise this is a bit odd - You cannot set $!, Reading $! always reads errno from C. Setting $@ would be better. > would it be better to propogate the Net::LDAP::Message back to the caller? How would you do that ? Return the message on error and undef otherwise ? Also I would rather avoid recursion if possible, I hate recursion. Something like (untested) sub ldap_delete_tree { my $ldap = shift; my @dn = @_; while (@dn) { my $msg = $ldap->search( base => $dn[0], scope => 1, filter => "(objectclass=*)", attr => [ "1.1" ] ); unless( $msg->code() == LDAP_SUCCESS ) { $@ = Net::LDAP::Util::ldap_error_text( $msg->code() ); return undef; } if ($msg->count) { # # We have children # unshift @dn, $msg->entries; next; } # And then ourselves $msg = $ldap->delete( shift @dn ); unless( $msg->code() == LDAP_SUCCESS ) { $@ = Net::LDAP::Util::ldap_error_text( $msg->code() ); return undef; } } return 1; } Graham. |