1#!/usr/bin/perl -w
2#
3# recursive-ldap-delete.pl
4#
5# originally by Mike Jackson <mj@sci.fi>
6# shortened by Peter Marschall <peter@adpm.de>
7# based on ideas by Norbert Kiesel <nkiesel@tbdetworks.com>
8#
9# ToDo: check errors, handle references, ....
10
11use strict;
12use Net::LDAP;
13
14my $server      = "localhost";
15my $binddn      = "cn=directory manager";
16my $bindpasswd  = "foobar";
17my $delbranch   = "ou=users,dc=bigcorp,dc=com";		# branch to remove
18
19my $ldap        = Net::LDAP->new( $server ) or die "$@";
20$ldap->bind( $binddn, password => $bindpasswd, version => 3 );
21
22my $search      = $ldap->search( base   => $delbranch,
23                                 filter => "(objectclass=*)" );
24
25# delete the entries found in a sorted way:
26# those with more "," (= more elements) in their DN, which are deeper in the DIT, first
27# trick for the sorting: tr/,// returns number of , (see perlfaq4 for details)
28foreach my $e (sort { $b->dn =~ tr/,// <=> $a->dn =~ tr/,// } $search->entries()) {
29  $ldap->delete($e);
30}
31
32$ldap->unbind();
33