Hi,

On Tue, Jul 7, 2009 at 6:05 PM, Dieter Kluenter<die...@dkluenter.de> wrote:
> Hi,
> I want to set up perl based replication system. For this I just copied
> perldoc Net::LDAP::Intermediate::SyncInfo into my file, modified host
> name and search base. This script throws following error:
>
> die...@rubin:> perl synctest.pl
> Can't call method "isa" on an undefined value at synctest.pl line 37, <DATA> 
> line 872.
>        (in cleanup) Can't call method "isa" on an undefined value at 
> synctest.pl line 37, <DATA> line 872.
>
> ,----[ script lines 32 - 38 ]
> | sub searchCallback {
> |   my $message = shift;
> |   my $entry = shift;
> |   my @controls = $message->control;
> |
> |   if($controls[0]->isa('Net::LDAP::Control::SyncState')) {
> |     print "Received Sync State Control\n";
> `----
>
> What is wrong with this script?
>

The search callback is also called when receiving intermediate
messages (without control).
You can replace the problematic line with:
if($controls[0] and $controls[0]->isa(...

The example included in the doc is very simple and doesn't cover all
cases. For a working example (refreshOnly) see "sub searchCallback()"
in module Kolab::LDAP::Backend::syncrepl in Kolab ([kolab-syncrepl]).
Also you can encounter some problems with rereshAndPersist mode.

I will propose a patch to update the doc.

Mathieu Parent

[kolab-syncrepl]:
http://kolab.org/cgi-bin/viewcvs-kolab.cgi/server/perl-kolab/lib/Kolab/LDAP/Backend/syncrepl.pm?rev=1.6&content-type=text/vnd.viewcvs-markup

Reply via email to