[prev in list] [next in list] [prev in thread] [next in thread] 

List:       perl-ldap-dev
Subject:    RE: question about Net::LDAP::Message->control()
From:       Marc Sherman <msherman () bionetrix ! com>
Date:       2002-01-30 17:25:59
[Download RAW message or body]

Graham,

Thank you! That worked!! FWIW, I've been using Net::LDAP for a couple of
weeks and it's great :)

Marc Sherman
BioNetrix Inc.


> -----Original Message-----
> From: Graham Barr [mailto:gbarr@pobox.com]
> Sent: Wednesday, January 30, 2002 10:58 AM
> To: Marc Sherman
> Cc: 'perl-ldap-dev@lists.sourceforge.net'
> Subject: Re: question about Net::LDAP::Message->control()
> 
> 
> I see two problems here, A bug in your code and a bug in Net::LDAP
> 
> ->control returns a list, so calling it in a scalar context 
> will simply
> return how many controls there were. You should also really 
> pass the OID
> of the control you are looking for.
> 
> But the bug in Net::LDAP is that it is not extracting controls from
> SearchResultEntry PDUs, but only SearchResultDone PDUs
> 
> 
> Simply adding 
> 
>   $self->{controls} = $result->{controls}
>     if exists $result->{controls};
> 
> at around line 38 in lib/Net/LDAP?Search.pm should solve that.
> 
> However, this will only work for use in a callback, like you 
> are doing.
> 
> if someone just did the search then traversed the entry list, 
> these controls
> would be lost.
> 
> What is needed is for the Entry class to be able to hold 
> controls, which is
> something that is needed for LDIF too.
> 
> Graham.
> 
> On Wed, Jan 30, 2002 at 10:14:00AM -0500, Marc Sherman wrote:
> > Hello,
> > 
> > I'm trying to get persistent search working and I've been able to
> > successfully send the persistent search control to the 
> server. When I make a
> > change on the server, it successfully sends me an entry 
> change notification
> > control in response. I catch this response in the callback 
> that I specified
> > to Net::LDAP->search() and I'm able to print out the DN of 
> the changed
> > entry. My problem is that I am not able to extract the 
> change notification
> > control in the response message. Here is the debug output 
> which shows that
> > the control (OID 2.16.840.1.113730.3.4.7) is present in the response
> > message:
> > 
> > Net::LDAP=HASH(0x1bdf0a8) received:
> > 
> > 30 53 02 01 02 64 26 04 22 63 6E 3D 4C 75 63 79 0S...d&."cn=Lucy
> > 2C 6F 75 3D 44 65 76 65 6C 6F 70 6D 65 6E 74 2C ,ou=Development,
> > 6F 3D 42 69 6F 6E 65 74 72 69 78 30 00 A0 26 30 o=Bionetrix0..&0
> > 24 04 17 32 2E 31 36 2E 38 34 30 2E 31 2E 31 31 $..2.16.840.1.11
> > 33 37 33 30 2E 33 2E 34 2E 37 04 09 30 84 00 00 3730.3.4.7..0...
> > 00 03 0A 01 04 __ __ __ __ __ __ __ __ __ __ __ .....
> > 
> > 0000   83: SEQUENCE {
> > 0002    1:   INTEGER = 2
> > 0005   38:   [APPLICATION 4] {
> > 0007   34:     STRING = 'cn=Lucy,ou=Development,o=Bionetrix'
> > 002B    0:     SEQUENCE {
> > 002D     :     }
> > 002D     :   }
> > 002D   38:   [CONTEXT 0] {
> > 002F   36:     SEQUENCE {
> > 0031   23:       STRING = '2.16.840.1.113730.3.4.7'
> > 004A    9:       STRING
> > 004C     :         30 84 00 00 00 03 0A 01 04 __ __ __ __ 
> __ __ __ 0........
> > 0055     :     }
> > 0055     :   }
> > 0055     : }
> > In scrhCallBack !!
> >         Got an entry !!
> >                 DN = cn=Lucy,ou=Development,o=Bionetrix
> > Died at D:\BAS\GenericSync\LDAP\test3.pl line 75.
> > 
> > Here's my callback code:
> > 
> > sub srchCallBack
> > {
> >         my ($r, $obj) = @_;
> >         print "In scrhCallBack !!\n";
> >         if (!$obj)
> >         {
> >                 print "\t", $r->error, "\n";
> >         }
> >         elsif ($obj->isa('Net::LDAP::Entry'))
> >         {
> >                 print "\tGot an entry !!\n";
> >                 print "\t\tDN = ", $obj->dn, "\n";
> >                 $cbCtrl = $r->control or die "$@";
> >                 print "\t\t", $cbCtrl, "\n";
> >         }
> >         else
> >         {
> >                 print "\tGot a reference !!\n";
> >         }
> > }
> > 
> > As you can see my program dies as a result of $r->control 
> failing. I tried
> > getting $r->code and $r->error but these methods cause the 
> program to block
> > until the next change notification is received from the 
> server. Any hints on
> > how to get the control?
> > 
> > thanks,
> > Marc
> > 
> > 
> > 
> > 
> > 
> > 
> 

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic