steffen: server/perl-kolab/Kolab-LDAP LDAP.pm,1.14,1.15
cvs at intevation.de
cvs at intevation.de
Thu Aug 5 02:55:57 CEST 2004
Author: steffen
Update of /kolabrepository/server/perl-kolab/Kolab-LDAP
In directory doto:/tmp/cvs-serv8466/Kolab-LDAP
Modified Files:
LDAP.pm
Log Message:
connect to master when deleting objects
Index: LDAP.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/Kolab-LDAP/LDAP.pm,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -d -r1.14 -r1.15
--- LDAP.pm 4 Aug 2004 02:58:00 -0000 1.14
+++ LDAP.pm 5 Aug 2004 00:55:55 -0000 1.15
@@ -22,7 +22,7 @@
use 5.008;
use strict;
use warnings;
-use Net::LDAP;
+use Net::LDAP qw( LDAP_SUCCESS LDAP_PROTOCOL_ERROR LDAP_REFERRAL);
use Net::LDAPS;
use DB_File;
use Kolab;
@@ -311,6 +311,24 @@
Kolab::Cyrus::setQuota($cyrus, $uid, $quota, ($p eq 'sf' ? 1 : 0));
}
+sub createMasterLDAP {
+ my $uri = $Kolab::config{'ldap_master_uri'};
+
+ my $masterldap = Net::LDAP->new(
+ $uri,
+ version => 3,
+ timeout => 5,
+ verify => 'none');
+ my $mesg = $masterldap->bind(
+ $Kolab::config{'bind_dn'},
+ password => $Kolab::config{'bind_pw'});
+ if ($mesg->code) {
+ Kolab::log('L', "Unable to bind to `$uri', LDAP Error = `"
+ .$mesg->error."'", KOLAB_ERROR);
+ }
+ return $masterldap;
+}
+
sub deleteObject
{
# This should only ever be called if the object is specifically flagged for
@@ -327,23 +345,34 @@
if ($remfromldap) {
my $dn = $object->dn;
my $del = $object->get_value($Kolab::config{$p . '_field_deleted'}, asref => 1);
+ my $masterldap;
+ if( lc($Kolab::config{'is_master'}) eq 'true' ) {
+ # We are the master, just go ahead
+ $masterldap = $ldap;
+ } else {
+ $masterldap = createMasterLDAP;
+ }
if( ref($del) eq 'ARRAY' && scalar(@$del) == 1 ) {
# Ok we are the last one...
Kolab::log('L', "Removing DN `$dn'");
- my $mesg = $ldap->delete($dn);
- if ($mesg->code) {
- Kolab::log('L', "Unable to remove DN `$dn': ".$mesg->error, KOLAB_WARN);
+ my $mesg = $masterldap->delete($dn);
+ if ($mesg->code ) {
+ Kolab::log('L', "Unable to remove DN `$dn': ".$mesg->error, KOLAB_WARN);
}
} else {
# Just remove us from the deleteflag
Kolab::log('L', "Removing ".$Kolab::config{'fqhostname'}." from deleteflag in `$dn'");
- my $mesg = $ldap->modify( $dn, delete =>
- { $Kolab::config{$p . '_field_deleted'} =>
- $Kolab::config{'fqhostname'} } );
+ my $mesg = $masterldap->modify( $dn, delete =>
+ { $Kolab::config{$p . '_field_deleted'} =>
+ $Kolab::config{'fqhostname'} } );
if ($mesg->code) {
- Kolab::log('L', "Unable to remove ".$Kolab::config{'fqhostname'}
+ Kolab::log('L', "Unable to remove ".$Kolab::config{'fqhostname'}
." from deleteflag in `$dn': ".$mesg->error, KOLAB_WARN);
}
+ }
+ if( $ldap != $masterldap ) {
+ # Disconnect from master if we are the slave
+ $masterldap->disconnect;
}
}
More information about the commits
mailing list