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.
> 
> 

Reply via email to