[pkg-kolab] r775 - libkolab-perl/branches/2.2/debian/patches

mparent-guest at alioth.debian.org mparent-guest at alioth.debian.org
Sat Mar 29 11:08:38 UTC 2008


Author: mparent-guest
Date: 2008-03-29 11:08:37 +0000 (Sat, 29 Mar 2008)
New Revision: 775

Added:
   libkolab-perl/branches/2.2/debian/patches/90-fds-backend.dpatch
Log:
The patch for FDS backend


Added: libkolab-perl/branches/2.2/debian/patches/90-fds-backend.dpatch
===================================================================
--- libkolab-perl/branches/2.2/debian/patches/90-fds-backend.dpatch	                        (rev 0)
+++ libkolab-perl/branches/2.2/debian/patches/90-fds-backend.dpatch	2008-03-29 11:08:37 UTC (rev 775)
@@ -0,0 +1,270 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 90-fds-backend.dpatch by Mathieu Parent <math.parent at gmail.com>
+##
+## DP: Taken from https://www.intevation.de/roundup/kolab/issue1755
+## DP: Will be removed with rc3
+
+ at DPATCH@
+diff -urNad libkolab-perl-5.8.7-20080314~/lib/Kolab/LDAP/Backend/fds.pm libkolab-perl-5.8.7-20080314/lib/Kolab/LDAP/Backend/fds.pm
+--- libkolab-perl-5.8.7-20080314~/lib/Kolab/LDAP/Backend/fds.pm	1970-01-01 01:00:00.000000000 +0100
++++ libkolab-perl-5.8.7-20080314/lib/Kolab/LDAP/Backend/fds.pm	2008-03-29 11:54:57.000000000 +0100
+@@ -0,0 +1,259 @@
++package Kolab::LDAP::Backend::fds;
++
++##
++##  Copyright (c) 2003  Code Fusion cc, Stuart Bing� <s.binge at codefusion.co.za>
++##  Copyright (c) 2007  Martin Konold <martin.konold at erfrakon.de>
++##
++##  This  program is free  software; you can redistribute  it and/or
++##  modify it  under the terms of the GNU  General Public License as
++##  published by the  Free Software Foundation; either version 2, or
++##  (at your option) any later version.
++##
++##  This program is  distributed in the hope that it will be useful,
++##  but WITHOUT  ANY WARRANTY; without even the  implied warranty of
++##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++##  General Public License for more details.
++##
++##  You can view the  GNU General Public License, online, at the GNU
++##  Project's homepage; see <http://www.gnu.org/licenses/gpl.html>.
++##
++
++use 5.008;
++use strict;
++use warnings;
++use Kolab;
++use Kolab::Util;
++use Kolab::LDAP;
++use Net::LDAP;
++use Net::LDAP::Control;
++#use Mozilla::LDAP::API;
++use vars qw($ldap $cyrus);
++
++require Exporter;
++
++our @ISA = qw(Exporter);
++
++our %EXPORT_TAGS = (
++    'all' => [ qw(
++    &startup
++    &run
++    ) ]
++);
++
++our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
++
++our @EXPORT = qw(
++    
++);
++
++our $VERSION = '0.1';
++
++sub startup { 1; }
++
++sub shutdown
++{
++    Kolab::log('FDS', 'Shutting down');
++    exit(0);
++}
++
++sub abort
++{
++    Kolab::log('FDS', 'Aborting');
++    exit(1);
++}
++
++sub changeCallback
++{
++    Kolab::log('FDS', 'Change notification received', KOLAB_DEBUG);
++
++    ###   $_[0]   isa     Net::LDAP::Message
++    ###   $_[1]   shouldbea   Net::LDAP::Entry
++
++    my $mesg = shift || 0;
++    my $entry = shift || 0;
++
++    my $issearch = $mesg->isa("Net::LDAP::Search");
++    
++    Kolab::log('FDS', "issearch=" . $issearch , KOLAB_DEBUG);
++    if (!$issearch) {
++    Kolab::log('FDS', 'mesg is not a search object, testing code...', KOLAB_DEBUG);
++    if ($mesg->code == 88) {
++        Kolab::log('FDS', 'changeCallback() -> Exit code received, returning', KOLAB_DEBUG);
++        return;
++    } elsif ($mesg->code) {
++        Kolab::log('FDS', "mesg->code = `" . $mesg->code . "', mesg->msg = `" . $mesg->error . "'", KOLAB_DEBUG);
++        &abort;
++    }   
++    } else {
++    Kolab::log('FDS', 'mesg is a search object, not testing code', KOLAB_DEBUG);
++    }
++
++    Kolab::log('FDS', "entry=" . $entry , KOLAB_DEBUG);
++    
++    if (!$entry) {
++    Kolab::log('FDS', 'changeCallback() called with a null entry', KOLAB_DEBUG);
++    goto FOO;
++    return;
++    } elsif (!$entry->isa("Net::LDAP::Entry")) {
++    Kolab::log('FDS', 'changeCallback() called with an invalid entry', KOLAB_DEBUG);
++    return;
++    }
++
++    if (!Kolab::LDAP::isObject($entry, $Kolab::config{'user_object_class'}) &&
++        !Kolab::LDAP::isObject($entry, 'kolab')) {
++    Kolab::log('FDS', "Entry is not a `" . $Kolab::config{'user_object_class'} . "' or kolab configuration object, returning", KOLAB_DEBUG);
++    return;
++    }
++
++FOO:
++    Kolab::log('FDS', "Calling Kolab::LDAP::sync", KOLAB_DEBUG);
++    Kolab::LDAP::sync;
++    system("/kolab/sbin/kolabconf") == 0 || Kolab::log('SD', "Failed to run kolabconf: $?", KOLAB_ERROR);
++    Kolab::log('FDS', "Finished Kolab::LDAP::sync sleeping 1s", KOLAB_DEBUG);
++    sleep 1; # we get too many bogus change notifications!
++
++#    my $deleted = $entry->get_value($Kolab::config{'user_field_deleted'}) || 0;
++#    if ($deleted) {
++#    Kolab::LDAP::deleteObject($ldap, $cyrus, $entry);
++#    return;
++#    }
++#
++#    Kolab::LDAP::createObject($ldap, $cyrus, $entry);
++}
++
++sub run {
++  # This should be called from a separate thread, as we set our
++  # own interrupt handlers here
++
++  $SIG{'INT'} = \&shutdown;
++  $SIG{'TERM'} = \&shutdown;
++
++  END {
++    alarm 0;
++    Kolab::LDAP::destroy($ldap);
++  }
++
++  my $mesg;
++
++  Kolab::log('FDS', 'Listener starting up');
++
++  $cyrus = Kolab::Cyrus::create;
++
++  Kolab::log('FDS', 'Cyrus connection established', KOLAB_DEBUG);
++
++  while (1) {
++    Kolab::log('FDS', 'Creating LDAP connection to FDS server', KOLAB_DEBUG);
++
++    $ldap = Kolab::LDAP::create($Kolab::config{'user_ldap_ip'},
++                                $Kolab::config{'user_ldap_port'},
++                                $Kolab::config{'user_bind_dn'},
++                                $Kolab::config{'user_bind_pw'},
++                                1
++                               );
++    if (!$ldap) {
++        Kolab::log('FDS', 'Sleeping 5 seconds...');
++        sleep 5;
++        next;
++    }
++
++    Kolab::log('FDS', 'LDAP connection established', KOLAB_DEBUG);
++
++    Kolab::LDAP::ensureAsync($ldap);
++
++    Kolab::log('FDS', 'Async checked', KOLAB_DEBUG);
++
++    my $ctrl = Net::LDAP::Control->new(
++    #    type    => '1.2.840.113556.1.4.528',
++         type    => '2.16.840.1.113730.3.4.3',
++        critical    => 'true'
++    );
++
++    Kolab::log('FDS', 'Control created', KOLAB_DEBUG);
++
++    my @userdns = split(/;/, $Kolab::config{'user_dn_list'});
++    my $userdn;
++
++    Kolab::log('FDS', 'User DN list = ' . $Kolab::config{'user_dn_list'}, KOLAB_DEBUG);
++
++    if (length(@userdns) == 0) {
++    Kolab::log('FDS', 'No user DNs specified, exiting', KOLAB_ERROR);
++    exit(1);
++    }
++
++    foreach $userdn (@userdns) {
++      Kolab::log('FDS', "Registering change notification on DN `$userdn'");
++
++      $mesg = $ldap->search (base     => $userdn,
++                             scope    => 'one',
++                             control  => [ $ctrl ],
++                             callback => \&changeCallback,
++                             filter   => '(objectClass=*)',
++                             attrs    => [ '*',
++                                           $Kolab::config{'user_field_guid'},
++                                           $Kolab::config{'user_field_modified'},
++                                           $Kolab::config{'user_field_quota'},
++                                           $Kolab::config{'user_field_deleted'},
++                                         ],
++        );
++
++#          $status = ldap_create_persistentsearch_control($ld,$changetypes,$changesonly,$return_echg_ctrls,$ctrl_iscritical,$ctrlp);
++
++        Kolab::log('FDS', "Change notification registered on `$userdn'");
++    }
++
++    eval {
++        local $SIG{ALRM} = sub {
++        alarm 0;
++        Kolab::log('FDS', 'Connection refresh period expired; tearing down connection');
++
++        Kolab::LDAP::destroy($ldap);
++        next;
++        };
++
++        Kolab::log('FDS', 'Waiting for changes (refresh period = ' . $Kolab::config{'conn_refresh_period'} . ' minutes)...');
++        alarm $Kolab::config{'conn_refresh_period'} * 60;
++        $mesg->sync;
++        alarm 0;
++    };
++    }
++
++    1;
++}
++
++1;
++__END__
++
++=head1 NAME
++
++Kolab::LDAP::Backend::fds - Perl extension for Fedora Directory Server or Redhat Directory Server backend
++
++=head1 ABSTRACT
++
++  Kolab::LDAP::Backend::fds handles Fedora Directory Server or Redhat Directory Server backend to the
++  kolab daemon.
++
++=head1 AUTHOR
++
++Martin Konold <lt>martin.konold at erfrakon.de<gt>
++Stuart Bing� E<lt>s.binge at codefusion.co.za<gt>
++
++=head1 COPYRIGHT AND LICENSE
++
++Copyright (c) 2003  Code Fusion cc
++Copyright (c) 2007  Martin Konold, Erfrakon
++
++
++This  program is free  software; you can redistribute  it and/or
++modify it  under the terms of the GNU  General Public License as
++published by the  Free Software Foundation; either version 2, or
++(at your option) any later version.
++
++This program is  distributed in the hope that it will be useful,
++but WITHOUT  ANY WARRANTY; without even the  implied warranty of
++MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++General Public License for more details.
++
++You can view the  GNU General Public License, online, at the GNU
++Project's homepage; see <http://www.gnu.org/licenses/gpl.html>.
++
++=cut


Property changes on: libkolab-perl/branches/2.2/debian/patches/90-fds-backend.dpatch
___________________________________________________________________
Name: svn:executable
   + *




More information about the pkg-kolab-devel mailing list