Thanks Graham, that got it working. Here is the code just in case someone else is trying to accomplish this. I have only run this against our eDirectory installation.
use Net::LDAP; use Net::LDAP::Control; use Convert::ASN1; use Net::LDAP::Constant qw(LDAP_CONTROL_PERSISTENTSEARCH LDAP_CONTROL_ENTRYCHANGE); my $ldap = Net::LDAP->new(<ldap server>, version => 3) or die "$@"; $ldap->bind(<dn>,password => <password>); my $asn = Convert::ASN1->new; $asn->prepare(<<EOASN) or die; PersistentSearch ::= SEQUENCE { changeTypes INTEGER, changesOnly BOOLEAN, returnECs BOOLEAN } LDAPString ::= OCTET STRING -- UTF8String ?? LDAPDN ::= LDAPString EntryChangeNotification ::= SEQUENCE { changeType ENUMERATED { add (1), delete (2), modify (4), modDN (8) } previousDN LDAPDN OPTIONAL, -- modifyDN ops. only changeNumber INTEGER OPTIONAL -- if supported } EOASN my $params = $asn->find('PersistentSearch')->encode( changeTypes => 15, changesOnly => 1, returnECs => 1 ); my $persistctl = Net::LDAP::Control->new( critical => true, type => LDAP_CONTROL_PERSISTENTSEARCH, value => $params ); my $result = $ldap->search( filter => '(objectclass=person)', control => [ $persistctl ], callback => \&check_home ); die "error: ",$result->code,": ",$result->error if ($result->code); sub check_home { my $message = shift; my $entry = shift; print $entry->dn,"\n"; my ($control) = $message->control(LDAP_CONTROL_ENTRYCHANGE); my $changeType = $asn->find('EntryChangeNotification')->decode($control->value)->{changeType}; print "$changeType\n"; } ----- Original Message ----- From: Graham Barr <[EMAIL PROTECTED]> Date: Wednesday, April 7, 2004 9:10 am Subject: Re: LDAP_CONTROL_ENTRYCHANGE examples against eDirectory > On 7 Apr 2004, at 11:18, Graham Barr wrote: > > On 7 Apr 2004, at 11:17, Graham Barr wrote: > >> [NOTE to self: don't start to answer an email first thing in > the > >> morning] > > > > 2nd note to self. Remember to add attachments :-) > > > > Graham. > > <controls.patch> > > Actually that one is not quite right. Try this one. > >