#!/usr/bin/perl -w
#
# recursive-ldap-delete.pl
#
# Mike Jackson <mj@sci.fi>
# Norbert Kiesel <nkiesel@tbdetworks.com>
#

use strict;
use Net::LDAP;

my $server      = "localhost";
my $binddn      = "cn=directory manager";
my $bindpasswd  = "foobar";
my $base        = "dc=bigcorp,dc=com";
my $delbranch   = "ou=users,dc=bigcorp,dc=com";	# branch to remove

my $ldap = Net::LDAP->new($server) or die "$@";
$ldap->bind($binddn, password => $bindpasswd, version => 3);

my $result = $ldap->search(base   => $delbranch,
			   filter => "(objectclass=*)");

my @dnlist = map { $_->dn } $result->all_entries;

# tr/,// returns number of , (see perlfaq4 for details), so we get
# longer (in terms of #,) DNs first
$ldap->delete($_) for sort { $b =~ tr/,// <=> $a =~ tr/,// } @dnlist;

$ldap->unbind;
