mathieu: server/perl-kolab/lib/Kolab LDAP.pm,1.7,1.8

cvs at kolab.org cvs at kolab.org
Sat Jan 17 18:05:52 CET 2009


Author: mathieu

Update of /kolabrepository/server/perl-kolab/lib/Kolab
In directory doto:/tmp/cvs-serv18138/lib/Kolab

Modified Files:
	LDAP.pm 
Log Message:
in sub createObject: describe why mailboxes are also
created on others servers (mentioned in kolab/issue3253)


Index: LDAP.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/lib/Kolab/LDAP.pm,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -d -r1.7 -r1.8
--- LDAP.pm	10 Oct 2008 14:25:34 -0000	1.7
+++ LDAP.pm	17 Jan 2009 17:05:50 -0000	1.8
@@ -456,32 +456,36 @@
     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 ".lc($object->get_value($objuidfield))
-		 ." because it is deleted", KOLAB_DEBUG);
-      return;
+        Kolab::log('L', "Kolab::LDAP::createObject() skipping object ".lc($object->get_value($objuidfield))
+            ." because it is deleted", KOLAB_DEBUG);
+        return;
     }
     if( ($kolabhomeserver && $kolabhomeserver ne lc($Kolab::config{'fqdnhostname'})) 
-	|| $kolabimapserver && $kolabimapserver ne lc(hostfqdn()) ) {
-      if( $p eq 'sf' ) {
-	# Dont create shared folders on other hosts than it's kolabhomeserver
-	Kolab::log('L', "Kolab::LDAP::createObject() skipping shared folder for other server $kolabhomeserver", KOLAB_DEBUG);
-	return;
-      }
-      Kolab::log('L', "Kolab::LDAP::createObject() for other server $kolabhomeserver. TODO: Create referral or something, for now we just create ", KOLAB_DEBUG);
-      $islocal = 0;
+        || $kolabimapserver && $kolabimapserver ne lc(hostfqdn()) ) {
+        # We are not on the home server
+        if( $p eq 'sf' ) {
+            # Dont create shared folders on other hosts than it's kolabhomeserver
+            Kolab::log('L', "Kolab::LDAP::createObject() skipping shared folder for other server $kolabhomeserver", KOLAB_DEBUG);
+            return;
+        }
+        Kolab::log('L', "Kolab::LDAP::createObject() for other server than $kolabhomeserver. TODO: Create referral or something, for now we just create an empty INBOX", KOLAB_DEBUG);
+        # We create INBOX on other servers also, to allow access to shared/published
+        # folders on those servers because some IMAP clients abort the connection
+        # to an IMAP server if they cannot access the INBOX.
+        $islocal = 0;
     }
 
     # Intermediate multidomain support:
     # We accept domain encoded in CN...
     if( $p eq 'sf' && index( $uid, '@' ) < 0 ) {
-      # We have to create shared folders
-      # with names shared.<fldrname>@<domain>
-      my @dcs = split(/,/,$object->dn());
-      my @dn;
-      while( pop( @dcs ) =~ /dc=(.*)/ ) {
-	push(@dn, $1);
-      }
-      if( $#dn > 0 ) { $uid .= '@'.join('.',reverse(@dn)); }
+        # We have to create shared folders
+        # with names shared.<fldrname>@<domain>
+        my @dcs = split(/,/,$object->dn());
+        my @dn;
+        while( pop( @dcs ) =~ /dc=(.*)/ ) {
+            push(@dn, $1);
+        }
+        if( $#dn > 0 ) { $uid .= '@'.join('.',reverse(@dn)); }
     }
     if (!$uid) {
         Kolab::log('L', "Kolab::LDAP::createObject() called with null id attribute `$objuidfield', returning", KOLAB_DEBUG);
@@ -501,7 +505,7 @@
             Kolab::log('L', "Object `$uid' already exists as `$olduid'; refusing to create", KOLAB_WARN);
         } else {
             Kolab::log('L', "Object `$uid' already exists, skipping", KOLAB_DEBUG);
-	}
+        }
         # Nothing changed; nothing to do
     } else {
         # No official records - check the graveyard
@@ -513,40 +517,40 @@
             # We have a object that we have no previous record of, so create everything
             if ($sync) { $newuid_db{$guid} = $uid; } else { uidcacheStore($guid, $uid); }
             Kolab::Cyrus::createMailbox($cyrus, $uid, ($p eq 'sf' ? 1 : 0));
-	      if( $p eq 'sf' ){
-    		my $foldertype = lc($object->get_value('kolabfoldertype'));
+            if( $p eq 'sf' ){
+                my $foldertype = lc($object->get_value('kolabfoldertype'));
 
-		if ( $foldertype ne '' ){
-		  Kolab::Cyrus::setFolderType($cyrus,$uid,1,$foldertype);
-		}
-	      }
-	    if( $p ne 'sf' && !$islocal ) {
-	      # Hide user mailboxes on other servers
-	      Kolab::Cyrus::setACL($cyrus,$uid,0, ["$uid rswipcda"]);
-	    } elsif( $p ne 'sf' ) {
-	      # Deal with group and resource accounts
-	      my $edn = Net::LDAP::Util::ldap_explode_dn($object->dn(), casefold=>'lower' );
-	      my $gcn = $edn->[1]->{'cn'};
-	      if( $gcn && ($gcn eq 'groups' || $gcn eq 'resources') ) {
-		# We need to give the calendar user access to the
-		# group's/resource's Calendar folder.
-		# TODO: Don't hardcode user and folder name
-		Kolab::log('L', "Detected group or resource account, creating calendar folder", KOLAB_ERROR );
-		my $domain;
-		my $user;
-		if ($uid =~ /(.*)\@(.*)/) {
-		    $user = $1;
-		    $domain = $2;
-		} else {
-		    $user = $uid;
-		    $domain = $Kolab::config{'postfix-mydomain'};
-		}
-		my $folder = $user . '/Calendar@' . $domain;
-		Kolab::Cyrus::createMailbox($cyrus, $folder, 0);
-		Kolab::Cyrus::setFolderType($cyrus, $folder, 0, 'event.default');
-		Kolab::Cyrus::setACL($cyrus, $folder, 0, ["$uid all", 'calendar@' . $domain .' all']);
-	      }
-	    }
+                if ( $foldertype ne '' ){
+                    Kolab::Cyrus::setFolderType($cyrus,$uid,1,$foldertype);
+                }
+            }
+            if( $p ne 'sf' && !$islocal ) {
+                # Hide user mailboxes on other servers
+                Kolab::Cyrus::setACL($cyrus,$uid,0, ["$uid rswipcda"]);
+            } elsif( $p ne 'sf' ) {
+                # Deal with group and resource accounts
+                my $edn = Net::LDAP::Util::ldap_explode_dn($object->dn(), casefold=>'lower' );
+                my $gcn = $edn->[1]->{'cn'};
+                if( $gcn && ($gcn eq 'groups' || $gcn eq 'resources') ) {
+                    # We need to give the calendar user access to the
+                    # group's/resource's Calendar folder.
+                    # TODO: Don't hardcode user and folder name
+                    Kolab::log('L', "Detected group or resource account, creating calendar folder", KOLAB_ERROR );
+                    my $domain;
+                    my $user;
+                    if ($uid =~ /(.*)\@(.*)/) {
+                        $user = $1;
+                        $domain = $2;
+                    } else {
+                        $user = $uid;
+                        $domain = $Kolab::config{'postfix-mydomain'};
+                    }
+                    my $folder = $user . '/Calendar@' . $domain;
+                    Kolab::Cyrus::createMailbox($cyrus, $folder, 0);
+                    Kolab::Cyrus::setFolderType($cyrus, $folder, 0, 'event.default');
+                    Kolab::Cyrus::setACL($cyrus, $folder, 0, ["$uid all", 'calendar@' . $domain .' all']);
+                }
+            }
         }
     }
 
@@ -559,12 +563,12 @@
     defined($quota) or ($quota = 0);
     my $oldquota = quotaFetch($guid);
     if( $quota != $oldquota ) {
-	Kolab::Cyrus::setQuota($cyrus, $uid, $quota*1024, ($p eq 'sf' ? 1 : 0));
-	if( $quota == 0 ) {
-	    quotaDelete{$guid};
-	} else {
-	    quotaStore($guid, $quota);
-	}
+        Kolab::Cyrus::setQuota($cyrus, $uid, $quota*1024, ($p eq 'sf' ? 1 : 0));
+        if( $quota == 0 ) {
+            quotaDelete{$guid};
+        } else {
+            quotaStore($guid, $quota);
+        }
     }
     Kolab::log('L', "createObject() done", KOLAB_DEBUG );
 }





More information about the commits mailing list