thomas: server/perl-kolab/lib/Kolab Cyrus.pm, 1.6, 1.7 LDAP.pm, 1.11, 1.12

cvs at kolab.org cvs at kolab.org
Mon Mar 16 18:17:37 CET 2009


Author: thomas

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

Modified Files:
	Cyrus.pm LDAP.pm 
Log Message:
Select random imap partition when creating new user mailboxes.

The behavior can be modified by setting a different imappartitions_script in
kolab.conf or disabled by setting imappartitions_script to an empty value.


Index: Cyrus.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/lib/Kolab/Cyrus.pm,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- Cyrus.pm	10 Oct 2008 14:24:46 -0000	1.6
+++ Cyrus.pm	16 Mar 2009 17:17:34 -0000	1.7
@@ -96,12 +96,13 @@
     my $cyrus = shift;
     my $uid = shift;
     my $sf = shift || 0;
-    my $cyruid = &createUid($uid, $sf);
+    my $partition = shift || '';
 
+    my $cyruid = &createUid($uid, $sf);
     my $mailbox = ($cyrus->list($cyruid))[0];
     if ($uid && ($uid ne $Kolab::config{'cyrus_admin'}) && ($uid ne "freebusy") && ($uid ne "nobody") && !defined($mailbox)) {
-        Kolab::log('Y', "Creating mailbox `$cyruid'");
-        if (!$cyrus->create($cyruid)) {
+        Kolab::log('Y', "Creating mailbox `$cyruid' on ".($partition?"partition `$partition'":"default partition"));
+        if (!$cyrus->create($cyruid, $partition)) {
             Kolab::log('Y', "Unable to create mailbox `$cyruid', Error = `" . $cyrus->error . "'", KOLAB_WARN);
         }
     } else {

Index: LDAP.pm
===================================================================
RCS file: /kolabrepository/server/perl-kolab/lib/Kolab/LDAP.pm,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- LDAP.pm	19 Feb 2009 14:37:14 -0000	1.11
+++ LDAP.pm	16 Mar 2009 17:17:34 -0000	1.12
@@ -525,9 +525,20 @@
             if ($sync) { $newuid_db{$guid} = $oldgyarduid; } else { uidcacheStore($guid, $oldgyarduid); }
         } else {
             Kolab::log('L', "Creating user `$uid' corresponding to GUID `$guid'", KOLAB_DEBUG);
+            my $partition = '';
+            my $imappartitions_script = $Kolab::config{'imappartitions_script'};
+            if ($imappartitions_script) {
+                my @partitions;
+                if (@partitions = `$imappartitions_script`) {
+                    $partition = $partitions[rand($#partitions + 1)];
+                    chomp $partition;
+                } else {
+                    Kolab::log('L', "Unable to run imappartitions_script `$imappartitions_script': $!", KOLAB_ERROR);
+                }
+            }
             # 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));
+            Kolab::Cyrus::createMailbox($cyrus, $uid, ($p eq 'sf' ? 1 : 0), $partition);
             if( $p eq 'sf' ){
                 my $foldertype = lc($object->get_value('kolabfoldertype'));
 





More information about the commits mailing list