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