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