steffen: server/perl-kolab/Kolab-LDAP LDAP.pm,1.12,1.13

cvs at intevation.de cvs at intevation.de
Fri Jul 16 19:18:06 CEST 2004


Author: steffen

Update of /kolabrepository/server/perl-kolab/Kolab-LDAP
In directory doto:/tmp/cvs-serv1560/perl-kolab/Kolab-LDAP

Modified Files:
	LDAP.pm 
Log Message:
new deleteflag semantics

Index: LDAP.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/Kolab-LDAP/LDAP.pm,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- LDAP.pm	11 Jul 2004 16:12:07 -0000	1.12
+++ LDAP.pm	16 Jul 2004 17:18:03 -0000	1.13
@@ -180,8 +180,12 @@
 {
     my $object = shift;
     my $p = shift || 'user';
-    my $del = $object->get_value($Kolab::config{$p . '_field_deleted'}) || '';
-    return ($del =~ /true/i);
+    my $del = $object->get_value($Kolab::config{$p . '_field_deleted'}, asref => 1 );
+    #foreach (@$del) {
+    #  return 1 if lc($_) eq lc($Kolab::config{'fqhostname'});
+    #}
+    #return 0;
+    return $#$del > 0;
 }
 
 # Map from Kolab ACLs to Cyrus ACLs
@@ -219,6 +223,12 @@
 
     my $homeserver = $object->get_value('homeServer');
     my $islocal = 1;
+    my $del = $object->get_value($Kolab::config{$p . '_field_deleted'}, asref => 1);
+    if( ref($del) eq 'ARRAY' && @$del > 0 ) {
+      Kolab::log('L', "Kolab::LDAP::createObject() skipping object ".$object->get_value($objuidfield)
+		 ." because it is deleted");
+      return;
+    }
     if( $homeserver && $homeserver ne $Kolab::config{'fqhostname'} ) {
       if( $p eq 'sf' ) {
 	# Dont create shared folders on other hosts than it's homeserver
@@ -316,11 +326,25 @@
 
     if ($remfromldap) {
         my $dn = $object->dn;
-        Kolab::log('L', "Removing DN `$dn'");
-        my $mesg = $ldap->delete($dn);
-        if ($mesg->code) {
-            Kolab::log('L', "Unable to remove DN `$dn'", KOLAB_WARN);
-        }
+	my $del = $object->get_value($Kolab::config{$p . '_field_deleted'}, asref => 1);
+	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);
+	  }
+	} 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'} } );
+	  if ($mesg->code) {
+            Kolab::log('L', "Unable to remove ".$Kolab::config{'fqhostname'}
+		       ." from deleteflag in `$dn': ".$mesg->error, KOLAB_WARN);
+	  }
+	}
     }
 
     my $guid = $object->get_value($Kolab::config{$p . '_field_guid'});
@@ -426,7 +450,7 @@
         $ldapmesg = $ldap->search(
             base    => $dn,
             scope   => 'sub',
-            filter  => '(&(objectClass=' . $Kolab::config{$p . '_object_class'} . ")$add(" . $Kolab::config{$p . '_field_deleted'} . '=TRUE))',
+            filter  => '(&(objectClass=' . $Kolab::config{$p . '_object_class'} . ")$add(" . $Kolab::config{$p . '_field_deleted'} . '='.$Kolab::config{'fqhostname'}.'))',
             attrs   => [
                 '*',
                 $Kolab::config{$p . '_field_guid'},





More information about the commits mailing list