Compare commits

...

33 Commits

Author SHA1 Message Date
Daniel Berteaud
3a72fe43dc Automatic commit of package [ipasserelle-groupware] release [0.2.37-1].
Created by command:

/usr/bin/tito tag
2018-03-27 15:40:36 +02:00
Daniel Berteaud
62c72063a3 Configure tito 2018-03-27 15:40:06 +02:00
Daniel Berteaud
f3886a8d31 Initialized to use tito. 2018-03-27 15:39:40 +02:00
Daniel Berteaud
71a13a0f32 Adapt spec file for tito 2018-03-27 15:37:28 +02:00
Daniel Berteaud
d4b8c580c8 Also use / separator when PublicMailbox is enabled 2018-03-27 15:34:45 +02:00
Daniel Berteaud
a92c967750 Spec file update 2017-07-03 11:52:40 +02:00
Daniel Berteaud
1bf49af229 Add optional debug directives 2017-07-03 11:26:27 +02:00
Daniel Berteaud
895af6c23d Spec file update 2017-06-20 17:25:49 +02:00
Daniel Berteaud
78dd537c35 Allow setting number of workers 2017-06-20 17:02:59 +02:00
Daniel Berteaud
3367ad69ac Spec file update 2017-03-23 14:29:07 +01:00
Daniel Berteaud
2dc55fdd13 Use expire-autoreply for SOGo 2 instead of update-autoreply 2017-03-23 14:26:54 +01:00
Daniel Berteaud
1ed7ed509a Spec file update 2017-02-16 12:58:18 +01:00
Daniel Berteaud
d3d85fae71 Set a shorter cache TTL when not using CAS authentication 2017-02-16 11:32:28 +01:00
Daniel Berteaud
90d3c32e99 Spec file update 2017-01-09 15:02:52 +01:00
Daniel Berteaud
0e49554d1d Fix permission on sieve master passwd file 2017-01-05 09:26:05 +01:00
Daniel Berteaud
2079b392f8 Remove custom login page template 2017-01-03 12:28:26 +01:00
Daniel Berteaud
fcc5bf15a3 Set Junk folder 2017-01-03 12:25:24 +01:00
Daniel Berteaud
987e0e06b4 Add support for vacation scheduling using a sieve admin account 2017-01-03 12:14:36 +01:00
Daniel Berteaud
3cb2b15e1c Spec file update 2016-06-24 10:37:33 +02:00
Daniel Berteaud
342ecc8603 Use / separator when dovecot has SharedMailbox enabled 2016-06-24 09:43:15 +02:00
Daniel Berteaud
d2a1a9ea7c Spec file update 2016-06-08 12:21:16 +02:00
Daniel Berteaud
6a16066b0e Possibility to set memory limit 2016-06-08 11:32:21 +02:00
Daniel Berteaud
87f6353679 Spec file update 2016-06-06 16:05:30 +02:00
Daniel Berteaud
bea4d69eda Set . as mailbox separator 2016-06-06 16:04:34 +02:00
Daniel Berteaud
562f3c5482 Spec file update 2015-06-03 12:39:12 +02:00
Daniel Berteaud
2a929928ab Upgrade DB schema to 2.3 2015-06-03 12:38:27 +02:00
Daniel Berteaud
1178bfe145 Spec file update 2015-03-25 16:50:09 +01:00
Daniel Berteaud
4572b13456 Allow cross site requests on dav resources 2015-03-25 16:49:15 +01:00
Daniel Berteaud
c732cb5a8f Spec file update 2015-03-05 11:06:38 +01:00
Daniel Berteaud
ca95ee7843 Put iPasserelle logo in the correct dir 2015-03-05 10:34:42 +01:00
Daniel Berteaud
da46b8c31b Update Login page wox template 2015-03-05 10:29:15 +01:00
Daniel Berteaud
07e7af8352 Add an Authentication prop to use SOGo's internal auth 2015-03-05 09:22:35 +01:00
Daniel Berteaud
6d2bab5610 Spec file update 2015-02-18 12:38:48 +01:00
30 changed files with 190 additions and 105 deletions

3
.tito/packages/.readme Normal file
View File

@ -0,0 +1,3 @@
the .tito/packages directory contains metadata files
named after their packages. Each file has the latest tagged
version and the project's relative directory.

View File

@ -0,0 +1 @@
0.2.37-1 ./

1
.tito/releasers.conf Symbolic link
View File

@ -0,0 +1 @@
../../tito_libs/releasers.conf

6
.tito/tito.props Normal file
View File

@ -0,0 +1,6 @@
[buildconfig]
builder = tito.builder.Builder
tagger = tito.tagger.VersionTagger
changelog_do_not_remove_cherrypick = 0
changelog_format = %s (%ae)
lib_dir = ../tito_libs

View File

@ -10,6 +10,9 @@ templates2events("/etc/sogo/sogo.conf", qw(email-update bootstrap-console-save p
templates2events("/etc/sysconfig/sogo", qw(email-update bootstrap-console-save));
templates2events("/etc/logrotate.d/sogo", qw(email-update bootstrap-console-save));
templates2events("/etc/pam.d/dovecot", qw(email-update bootstrap-console-save));
templates2events("/etc/sogo/sieve.creds", qw(email-update bootstrap-console-save));
templates2events("/etc/cron.d/sogo", qw(email-update bootstrap-console-save));
templates2events("/etc/dovecot/master.sieve.127.0.0.1", qw(email-update bootstrap-console-save));
safe_symlink("restart", "root/etc/e-smith/events/email-update/services2adjust/sogod");
safe_symlink("restart", "root/etc/e-smith/events/email-update/services2adjust/memcached-sogo");

View File

@ -1,11 +1,8 @@
%define version 0.2.24
%define release 1
%define name ipasserelle-groupware
%define debug_package %{nil}
Name: %{name}
Version: %{version}
Release: %{release}%{?dist}
Name: ipasserelle-groupware
Version: 0.2.37
Release: 1%{?dist}
Epoch: 9
Summary: iPasserelle Groupware module
Group: Networking/Daemons
@ -19,7 +16,7 @@ BuildRequires: e-smith-devtools
BuildRequires: gcc
Requires: smeserver-release >= 8
Requires: e-smith-ldap >= 5.2.0-19
Requires: sogo >= 2.2.0
Requires: sogo >= 2.3.0
Requires: sogo-tool
Requires: sogo-activesync
Requires: sope49-gdl1-mysql
@ -39,6 +36,49 @@ iPasserelle module for the groupware application.
Based on smeserver-sogo from nethesis
%changelog
* Tue Mar 27 2018 Daniel Berteaud <daniel@firewall-services.com> 0.2.37-1
- new package built with tito
- Use / separator when using only PublicMailbox
* Mon Jul 3 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.2.36-1
- Add Debug prop to turn on all the debug directives in sogo.conf
* Tue Jun 20 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.2.35-1
- Allow setting the number of workers, or the number of users per worker
* Thu Mar 23 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.2.34-1
- Use expire-autoreply for SOGo v2 instead of update-autoreply
* Thu Feb 16 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.2.33-1
- Set a shorter cache TTL when not using CAS authentication
* Mon Jan 9 2017 Daniel Berteaud <daniel@firewall-services.com> - 0.2.32-1
- Support vacation schedule using a sieve master user
- Set junk folder to junkmail
- Remove custom login page template
* Fri Jun 24 2016 Daniel Berteaud <daniel@firewall-services.com> - 0.2.31-1
- Use / as mailbox separator when shared mailbox is enabled
* Wed Jun 8 2016 Daniel Berteaud <daniel@firewall-services.com> - 0.2.30-1
- Possibility to set sogo per worker memory limit
* Mon Jun 6 2016 Daniel Berteaud <daniel@firewall-services.com> - 0.2.29-1
- Set . as mailbox separator
* Wed Jun 3 2015 Daniel Berteaud <daniel@firewall-services.com> - 0.2.28-1
- Upgrade DB schema for 2.3.0
* Wed Mar 25 2015 Daniel Berteaud <daniel@firewall-services.com> - 0.2.27-1
- Allow cross site requests on dav resources
* Thu Mar 5 2015 Daniel Berteaud <daniel@firewall-services.com> - 0.2.26-1
- Add a Authentication prop to choose between CAS or internal auth
- Update login page wox template
- Put logo_ipasserelle.png in the right directory on x86_64
* Wed Feb 18 2015 Daniel Berteaud <daniel@firewall-services.com> - 0.2.25-1
- Allow EAS push
* Tue Feb 17 2015 Daniel Berteaud <daniel@firewall-services.com> - 0.2.24-1
- Increase memcached duration to 2 hours
- Completly disable dovecot's negative cache
@ -207,7 +247,6 @@ Based on smeserver-sogo from nethesis
%{__mkdir_p} root/usr/share/SOGo/cgi-bin
perl ./createlinks
gcc -o cas-proxy-validate ./cas-proxy-validate.c $RPM_OPT_FLAGS
find .
%install
rm -rf $RPM_BUILD_ROOT
@ -216,6 +255,8 @@ rm -f %{name}-%{version}-filelist
(cd root ; /usr/bin/find . -depth -print | /bin/cpio -dump $RPM_BUILD_ROOT)
install -p cas-proxy-validate $RPM_BUILD_ROOT/usr/share/SOGo/cgi-bin/
%{__mkdir_p} $RPM_BUILD_ROOT%{_libdir}/GNUstep/SOGo/WebServerResources/
install -p logo_ipasserelle.png $RPM_BUILD_ROOT%{_libdir}/GNUstep/SOGo/WebServerResources/logo_ipasserelle.png
%{__mkdir_p} $RPM_BUILD_ROOT/home/e-smith/db/sogo
/sbin/e-smith/genfilelist \

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,6 +0,0 @@
#!/bin/bash
TIME=$(/sbin/e-smith/db configuration getprop sogod SessionDuration || echo 1440)
# Remove old SOGo sessions entries
su -l -s /bin/bash sogo -c "/usr/sbin/sogo-tool expire-sessions $TIME"

View File

@ -0,0 +1 @@
junkmail

View File

@ -0,0 +1,32 @@
{
my $sogodrec = $DB->get('sogod')
|| $DB->new_record('sogod', {type => 'service'});
my $sogod_sieve_pw = $sogodrec->prop('SieveMasterPassword');
if (not $sogod_sieve_pw or length($sogod_sieve_pw) < 57)
{
use MIME::Base64 qw(encode_base64);
$sogod_sieve_pw = "not set due to error";
if ( open( RANDOM, "/dev/urandom" ) )
{
my $buf;
# 57 bytes is a full line of Base64 coding, and contains
# 456 bits of randomness - given a perfectly random /dev/random
if ( read( RANDOM, $buf, 57 ) != 57 )
{
warn("Short read from /dev/random: $!");
}
else
{
$sogod_sieve_pw = encode_base64($buf);
chomp $sogod_sieve_pw;
}
close RANDOM;
}
else
{
warn "Could not open /dev/urandom: $!";
}
$sogodrec->set_prop('SieveMasterPassword', $sogod_sieve_pw);
}
}

View File

@ -0,0 +1,2 @@
PERMS=0640
GID="dovecot"

View File

@ -0,0 +1,3 @@
PERMS=0640
UID="root"
GID="sogo"

View File

@ -0,0 +1,5 @@
{
my $version = qx(/bin/rpm -q --qf "%{version}" sogo-tool);
my $cmd = ($version =~ m/^2/) ? 'expire-autoreply' : 'update-autoreply';
$OUT = "0 0 * * * sogo /usr/sbin/sogo-tool $cmd -p /etc/sogo/sieve.creds";
}

View File

@ -0,0 +1 @@
* * * * * sogo /usr/sbin/sogo-tool expire-sessions { $sogod{SessionDuration} || '60' }

View File

@ -1,3 +1,17 @@
auth_cache_size = { $dovecot{'AuthCacheSize'} || '5242880' }
auth_cache_ttl = 7200
auth_cache_negative_ttl = 0
{
# Only enable auth cache if SOGo is using CAS
my $sogo_auth = $sogod{'Authentication'} || 'cas';
if (lc $sogo_auth eq 'cas'){
my $size = $dovecot{'AuthCacheSize'} || '5242880';
my $ttl = $dovecot{'AuthCacheTTL'} || '7200';
my $neg_ttl = $dovecot{'AuthCacheNegativeTTL'} || '0';
$OUT .=<<"EOF";
auth_cache_size = $size
auth_cache_ttl = $ttl
auth_cache_negative_ttl = $neg_ttl
EOF
}
else{
$OUT .= "# No auth cache as SOGo doesn't use CAS";
}
}

View File

@ -0,0 +1,9 @@
passdb \{
driver = passwd-file
master = yes
args = username_format=%u /etc/dovecot/master.%s.%r
\}
userdb \{
driver = passwd-file
args = username_format=%u /etc/dovecot/master.%s.%r
\}

View File

@ -0,0 +1 @@
sogo-sieve:\{plain\}{ $sogod{SieveMasterPassword} }:101:101::/home/e-smith::allow_nets=127.0.0.1/8

View File

@ -36,5 +36,22 @@ REPLACE INTO db (
FLUSH PRIVILEGES;
EOF
# Upgrade DB for 2.3.0
for TABLE in \$(/usr/bin/mysql $db -s -e "select SUBSTRING_INDEX(c_quick_location, '/', -1) from sogo_folder_info where c_path3 = 'Calendar';"); do
/usr/bin/mysql $db -e "ALTER TABLE \$TABLE MODIFY c_partstates mediumtext;"
/usr/bin/mysql $db <<EOF
DELIMITER ;;
CREATE PROCEDURE upgrade_230()
BEGIN
DECLARE CONTINUE HANDLER FOR 1060 BEGIN END;
ALTER TABLE \$TABLE ADD COLUMN c_description mediumtext;
END;;
CALL upgrade_230();;
DROP PROCEDURE upgrade_230;
EOF
done
END
}

View File

@ -49,6 +49,9 @@ RedirectMatch ^/.well-known/(caldav|carddav)$ /SOGo/dav/
AddDefaultCharset UTF-8
RequestHeader set "x-webobjects-server-url" "https://%\{REQUEST_HOST\}e/SOGo"
</Location>
<Location /SOGo/dav>
Header set Access-Control-Allow-Origin "*"
</Location>
<Location /SOGo/casProxy>
Order deny,allow

View File

@ -1,5 +1,6 @@
{
if (-d '/var/service/dovecot'){
my $auth = $sogod{'Authentication'} || 'cas';
if (lc $auth eq 'cas'){
$OUT .=<<"HERE";
auth sufficient pam_cas.so -simap://localhost -f/etc/pam_cas.conf
HERE

View File

@ -0,0 +1 @@
sogo-sieve:{ $sogod{SieveMasterPassword} }

View File

@ -1,2 +1,2 @@
SOGoMemcachedHost = "/var/run/sogo/memcached.sock";
SOGoCacheCleanupInterval = 7200;
SOGoCacheCleanupInterval = { $sogod{CacheCleanupInterval} || ($sogod{Authentication} || 'cas') ne 'internal' ? '7200' : '300' };

View File

@ -0,0 +1,5 @@
{
my $mem = $sogod{MemoryLimit};
return unless $mem;
$OUT .= " SxVMemLimit = $mem;\n";
}

View File

@ -4,9 +4,11 @@
SOGoSMTPServer = localhost;
SOGoIMAPServer = "imap://localhost:{$imap{'TCPPort'} || '143'}";
NGImap4DisableIMAP4Pooling = NO;
NGImap4ConnectionStringSeparator = "{ ((($dovecot{SharedMailbox} || 'disabled') eq 'enabled') || (($dovecot{PublicMailbox} || 'disabled') eq 'enabled')) ? '/' : '.' }";
SOGoDraftsFolderName = {($sogod{'DraftsFolder'} || "Drafts")};
SOGoSentFolderName = {($sogod{'SentFolder'} || "Sent")};
SOGoTrashFolderName = {($sogod{'TrashFolder'} || "Trash")};
SOGoJunkFolderName = {($sogod{'JunkFolder'} || "Junk")};
SOGoMailListViewColumnsOrder = (
Flagged, Attachment, Subject, From, Unread, Date, Size
);

View File

@ -56,8 +56,8 @@
\}
);
{
# is smeserver-dovecot installed ?
if (-d '/var/service/dovecot'){
my $auth = $sogod{'Authentication'} || 'cas';
if (lc $auth eq 'cas'){
$OUT .=<<"HERE";
SOGoAuthenticationType = cas;
SOGoCASServiceURL = "https://auth.$DomainName/cas/";

View File

@ -0,0 +1,11 @@
{
if (($sogod{Debug} || 'disabled') =~ m/^yes|on|enabled|1$/){
$OUT .=<<'_EOF';
SOGoDebugRequests = YES;
SOGoEASDebugEnabled = YES;
ImapDebugEnabled = YES;
LDAPDebugEnabled = YES;
MySQL4DebugEnabled = YES;
_EOF
}
}

View File

@ -1,12 +1,18 @@
{
use esmith::AccountsDB;
my $a = esmith::AccountsDB->open_ro || die "Couldn't open AccountsDB\n";
my $users = scalar($a->users());
my $fork = int($users/8);
$fork = 3 if ($fork < 3);
my $activeSync = $sogod{'ActiveSync'} || 'disabled';
$fork = $fork*2 if ($activeSync =~ m/^enabled|on|1|yes$/i);
use esmith::ConfigDB;
my $fork;
if ($sogod{Workers}){
$fork = $sogod{Workers};
}
else{
my $users_per_worker = (defined $sogod{UsersPerWorker}) ? $sogod{UsersPerWorker} : (($sogod{'ActiveSync'} || 'disabled') =~ m/^enabled|on|1|yes$/i) ? 4 : 7;
my $a = esmith::AccountsDB->open_ro || die "Couldn't open AccountsDB\n";
my $users = scalar($a->users());
$fork = int($users/$users_per_worker);
$fork = 3 if ($fork < 3);
}
$OUT .= "PREFORK=$fork";

View File

@ -1,78 +0,0 @@
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE var:component>
<var:component
className="UIxPageFrame"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:var="http://www.skyrix.com/od/binding"
xmlns:const="http://www.skyrix.com/od/constant"
xmlns:rsrc="OGo:url"
xmlns:label="OGo:label"
const:jsFiles="PasswordPolicy.js"
const:popup="YES"
><var:string var:value="doctype" const:escapeHTML="NO"/>
<div id="aboutBox" style="display:none;">
<div>
<p class="logo"><img const:alt="SOGo" rsrc:src="sogo-logo.png"/></p>
<p>Version <var:string value="version"/> <span class="buildDate">(<var:string value="buildDate" />)</span></p>
<p class="scroll"><var:string label:value="AboutBox" const:escapeHTML="NO"/></p>
<img const:alt="Inverse" rsrc:src="inverse.png"/>
<p class="links"><a href="http://www.sogo.nu/" target="_new">www.sogo.nu</a> /
<a href="http://www.inverse.ca/" target="_new">www.inverse.ca</a></p>
<p><a id="aboutClose" href="#" class="button">
<span><var:string label:value="OK" /></span></a></p>
</div>
</div>
<div id="linkBanner" class="linkbanner">
<a id="about" href="#"><var:string label:value="About" /></a>
</div>
<form id="connectForm" var:href="connectURL">
<div id="loginScreen">
<var:if condition="hasLoginSuffix"><script
type="text/javascript">var loginSuffix = '<var:string value="loginSuffix"/>';</script
></var:if>
<table width="560">
<tr>
<td>
<img const:alt="*" id="splash" rsrc:src="/logo_ipasserelle.png"/>
</td>
<td id="loginCell" width="230">
<label><var:string label:value="Username:"/><br/>
<input class="textField" id="userName" name="userName"
type="text" var:value="cookieUsername" /></label>
<label><var:string label:value="Password:"/><br/>
<input class="textField" id="password"
name="password" type="password" var:value="password" /></label>
<label><var:string label:value="Language:"/><br/>
<var:popup const:id="language" const:name="language"
list="languages"
item="item"
var:selection="item"
var:value="item"
string="languageText"
label:noSelectionString="choose"
/></label>
<var:if condition="hasLoginDomains">
<label><var:string label:value="Domain:"/><br/>
<var:popup const:id="domain" const:name="domain"
list="loginDomains"
item="item"
var:selection="item"
var:value="item"
string="item"
/></label>
</var:if>
<label><input id="rememberLogin" type="checkbox" class="checkBox" var:checked="rememberLogin"/> <var:string label:value="Remember username"/></label>
<label>
<a href="#" class="button" id="submit" name="submit">
<span><var:string label:value="Connect" /></span></a>
</label>
</td>
</tr>
<tr><td colspan="2"><label id="animation"><!-- busy.gif! --></label></td></tr>
</table>
<p id="errorMessage"><!-- space --></p>
</div>
</form
><img const:alt="*" id="preparedAnimation" rsrc:src="busy.gif"/>
</var:component>