[pkg-kolab] r949 - libkolab-perl/trunk/debian/patches
mparent-guest at alioth.debian.org
mparent-guest at alioth.debian.org
Sun Oct 5 12:01:11 UTC 2008
Author: mparent-guest
Date: 2008-10-05 12:01:10 +0000 (Sun, 05 Oct 2008)
New Revision: 949
Added:
libkolab-perl/trunk/debian/patches/51-syncrepl.dpatch
Log:
Added current syncrepl patch, not working as expected
Added: libkolab-perl/trunk/debian/patches/51-syncrepl.dpatch
===================================================================
--- libkolab-perl/trunk/debian/patches/51-syncrepl.dpatch (rev 0)
+++ libkolab-perl/trunk/debian/patches/51-syncrepl.dpatch 2008-10-05 12:01:10 UTC (rev 949)
@@ -0,0 +1,205 @@
+--- /root/syncrepl.pm.orig 2008-10-01 18:56:40.000000000 +0000
++++ /usr/share/perl5/Kolab/LDAP/Backend/syncrepl.pm 2008-10-04 12:40:34.000000000 +0000
+@@ -21,8 +21,12 @@
+ use warnings;
+ use Kolab;
+ use Kolab::LDAP;
+-use Net::LDAP;
++use Net::LDAP qw(
++ LDAP_SYNC_REFRESH_ONLY
++ LDAP_SYNC_REFRESH_AND_PERSIST
++);
+ use Net::LDAP::Control;
++use Net::LDAP::Control::SyncRequest;
+ use Net::LDAP::Entry;
+ use vars qw($ldap $cookie $disconnected);
+ my $cookie = '';
+@@ -45,96 +49,7 @@
+
+ );
+
+-our $VERSION = '0.1';
+-
+-# LDAP Content Synchronization Operation -- RFC 4533
+-use constant LDAP_SYNC_OID => "1.3.6.1.4.1.4203.1.9.1";
+-use constant {
+- LDAP_CONTROL_SYNC => LDAP_SYNC_OID.".1",
+- LDAP_CONTROL_SYNC_STATE => LDAP_SYNC_OID.".2",
+- LDAP_CONTROL_SYNC_DONE => LDAP_SYNC_OID.".3",
+- LDAP_SYNC_INFO => LDAP_SYNC_OID.".4",
+-
+- LDAP_SYNC_NONE => 0x00,
+- LDAP_SYNC_REFRESH_ONLY => 0x01,
+- LDAP_SYNC_RESERVED => 0x02,
+- LDAP_SYNC_REFRESH_AND_PERSIST => 0x03,
+-
+- LDAP_SYNC_REFRESH_PRESENTS => 0,
+- LDAP_SYNC_REFRESH_DELETES => 1,
+-
+- LDAP_TAG_SYNC_NEW_COOKIE => 0x80,
+- LDAP_TAG_SYNC_REFRESH_DELETE => 0xa1,
+- LDAP_TAG_SYNC_REFRESH_PRESENT => 0xa2,
+- LDAP_TAG_SYNC_ID_SET => 0xa3,
+-
+- LDAP_TAG_SYNC_COOKIE => 0x04,
+- LDAP_TAG_REFRESHDELETES => 0x01,
+- LDAP_TAG_REFRESHDONE => 0x01,
+- LDAP_TAG_RELOAD_HINT => 0x01,
+-
+- LDAP_SYNC_PRESENT => 0,
+- LDAP_SYNC_ADD => 1,
+- LDAP_SYNC_MODIFY => 2,
+- LDAP_SYNC_DELETE => 3,
+-};
+-
+-use Convert::ASN1;
+-use Data::Dumper;
+-
+-my $asn = Convert::ASN1->new;
+-
+-$asn->prepare(<<'LDAP_ASN') or die $asn->error;
+-syncUUID ::= OCTET STRING -- (SIZE(16))
+-
+-syncCookie ::= OCTET STRING
+-
+-syncRequestValue ::= SEQUENCE {
+- mode ENUMERATED {
+- -- 0 unused
+- refreshOnly (1),
+- -- 2 reserved
+- refreshAndPersist (3)
+- }
+- cookie syncCookie OPTIONAL,
+- reloadHint BOOLEAN -- DEFAULT FALSE
+-}
+-
+-syncStateValue ::= SEQUENCE {
+- state ENUMERATED {
+- present (0),
+- add (1),
+- modify (2),
+- delete (3)
+- }
+- entryUUID syncUUID,
+- cookie syncCookie OPTIONAL
+-}
+-
+-syncDoneValue ::= SEQUENCE {
+- cookie syncCookie OPTIONAL,
+- refreshDeletes BOOLEAN -- DEFAULT FALSE
+-}
+-
+-syncInfoValue ::= CHOICE {
+- newcookie [0] syncCookie,
+- refreshDelete [1] SEQUENCE {
+- refreshDeleteCookie syncCookie OPTIONAL,
+- refreshDeleteDone BOOLEAN -- DEFAULT TRUE
+- }
+- refreshPresent [2] SEQUENCE {
+- refreshDeletecookie syncCookie OPTIONAL,
+- refreshDeleteDone BOOLEAN -- DEFAULT TRUE
+- }
+- syncIdSet [3] SEQUENCE {
+- cookie syncCookie OPTIONAL,
+- refreshDeletes BOOLEAN, -- DEFAULT FALSE
+- syncUUIDs SET OF syncUUID
+- }
+-}
+-
+-LDAP_ASN
+-
++our $VERSION = '0.2';
+
+ sub startup { 1; }
+
+@@ -184,22 +99,17 @@
+ Kolab::LDAP::ensureAsync($ldap);
+ Kolab::log('SYNCREPL', 'Async checked', KOLAB_DEBUG);
+
+- Kolab::log('SYNCREPL', "Cookie: $cookie", KOLAB_DEBUG);
+-
+ while($ldap and not $disconnected) {
+- #sync control
+- my $asn_syncRequestValue = $asn->find('syncRequestValue');
+- my $ctrl = Net::LDAP::Control->new(type => LDAP_CONTROL_SYNC,
+- value => $asn_syncRequestValue->encode(mode => LDAP_SYNC_REFRESH_ONLY,
+- cookie => $cookie,
+- reloadHint => 0
+- ),
+- critical => 0
+- );
+- Kolab::log('SYNCREPL', 'Control created', KOLAB_DEBUG);
+-
+- #search
+- my $mesg = $ldap->search(base => $Kolab::config{'base_dn'},
++ my $ctrl = Net::LDAP::Control::SyncRequest->new(
++ mode => LDAP_SYNC_REFRESH_ONLY,
++ cookie => $cookie,
++ reloadHint => 0);
++ Kolab::log('SYNCREPL', 'Control created: mode='.$ctrl->mode().
++ '; cookie='.$ctrl->cookie().
++ '; reloadHint='.$ctrl->reloadHint(), KOLAB_DEBUG);
++
++ #search
++ my $mesg = $ldap->search(base => $Kolab::config{'base_dn'},
+ scope => 'sub',
+ control => [ $ctrl ],
+ callback => \&searchCallback, # call for each entry
+@@ -210,7 +120,7 @@
+ $Kolab::config{'user_field_quota'},
+ $Kolab::config{'user_field_deleted'},
+ ],
+- );
++ );
+ Kolab::log('SYNCREPL', 'Search created', KOLAB_DEBUG);
+ $mesg->sync;
+ Kolab::log('SYNCREPL', "Finished Net::LDAP::Search::sync sleeping 10s", KOLAB_DEBUG);
+@@ -223,7 +133,7 @@
+ #search callback
+ sub searchCallback {
+ my $mesg = shift;
+- my $entry = shift;
++ my $param2 = shift; # might be entry or intermediate
+ my $issearch = $mesg->isa("Net::LDAP::Search");
+ my @controls = $mesg->control;
+ if(not $issearch) {
+@@ -235,6 +145,8 @@
+ Kolab::log('SYNCREPL', "Not a search: mesg->code = `" . $mesg->code . "', mesg->msg = `" . $mesg->error . "'", KOLAB_DEBUG);
+ &abort;
+ }
++ } elsif($param2 && $param2->isa("Net::LDAP::Intermediate")) {
++ Kolab::log('SYNCREPL', 'Received Intermediate Message', KOLAB_DEBUG);
+ } elsif(@controls == 0) {
+ if ($mesg->code == 1) {
+ Kolab::log('SYNCREPL', 'No control: Communications Error: disconnecting', KOLAB_DEBUG);
+@@ -244,16 +156,21 @@
+ Kolab::log('SYNCREPL', "No control: mesg->code = `" . $mesg->code . "', mesg->msg = `" . $mesg->error . "'", KOLAB_DEBUG);
+ &abort;
+ }
+- } elsif($controls[0]->type eq LDAP_CONTROL_SYNC_STATE) {
+- Kolab::log('SYNCREPL', 'Received Sync State Control', KOLAB_DEBUG);
+- Kolab::log('SYNCREPL', "Entry (".$entry->changetype."): ".$entry->dn(), KOLAB_DEBUG);
+- } elsif($controls[0]->type eq LDAP_CONTROL_SYNC_DONE) {
+- Kolab::log('SYNCREPL', 'Received Sync Done Control', KOLAB_DEBUG);
+- my $asn_syncDoneValue = $asn->find('syncDoneValue');
+- my $out = $asn_syncDoneValue->decode($controls[0]->value);
++ } elsif($controls[0]->isa('Net::LDAP::Control::SyncState')) {
++ Kolab::log('SYNCREPL', 'Received Sync State Control: '.
++ 'state='.$controls[0]->state().
++ '; entryUUID='.unpack("H*",$controls[0]->entryUUID()).
++ '; cookie='.(defined($controls[0]->cookie()) ? $controls[0]->cookie() : 'UNDEF')
++ , KOLAB_DEBUG);
++ Kolab::log('SYNCREPL', "Entry (".$param2->changetype."): ".$param2->dn(), KOLAB_DEBUG);
++ } elsif($controls[0]->isa('Net::LDAP::Control::SyncDone')) {
++ Kolab::log('SYNCREPL', 'Received Sync Done Control: '.
++ 'cookie='.(defined($controls[0]->cookie()) ? $controls[0]->cookie() : 'UNDEF').
++ '; refreshDeletes='.$controls[0]->refreshDeletes()
++ , KOLAB_DEBUG);
+ #we have a new cookie
+- if(defined($out->{cookie}) and not $out->{cookie} eq '' and not $out->{cookie} eq $cookie) {
+- $cookie = $out->{cookie};
++ if(defined($controls[0]->cookie()) and not $controls[0]->cookie() eq '' and not $controls[0]->cookie() eq $cookie) {
++ $cookie = $controls[0]->cookie();
+ Kolab::log('SYNCREPL', "New cookie: $cookie", KOLAB_DEBUG);
+ Kolab::log('SYNCREPL', "Calling Kolab::LDAP::sync", KOLAB_DEBUG);
+ Kolab::LDAP::sync;
More information about the pkg-kolab-devel
mailing list