[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