Compare commits

...
Sign in to create a new pull request.

15 commits

Author SHA1 Message Date
4e07fdc3d5 Upgrade to 7.1.14 (#1263006) 2015-11-10 19:01:00 +01:00
8735de08ac - Upgrade to 7.1.13
- Added patch to fix a possible XSS situation in WebAccess
- Added patch to avoid non-working default font in WebAccess
- Added patch to implement DHE/EDH support (aside of ECDHE)
2015-08-05 08:48:55 +02:00
55f9cedbfc Added patch to build using GCC 5.x 2015-07-01 23:50:59 +02:00
f800d1c727 - Upgrade to 7.1.12 (re-released)
- Backported patch from Zarafa 7.2 to fix CVE-2015-3436 (#1222151)
2015-05-18 23:58:02 +02:00
17841d83c9 Upgrade to 7.1.12 2015-04-07 20:37:32 +02:00
c7ecef187e Handle "su" option in logrotate >= 3.8.0 to avoid errors 2015-03-18 13:17:27 +01:00
384c0c36e1 Update patch file names also in spec file 2015-03-06 00:39:02 +01:00
423e99d9b3 Added small security enhancement 2015-03-06 00:37:52 +01:00
860fae1250 Added minor bugfixes to two patches 2015-02-23 00:58:12 +01:00
ce0e01723f - Added multiple minor enhancement and bugfix patches
- Added patch to fix CVE-2014-0103 for PHP < 5.3 (#1073618)
2015-02-23 00:55:48 +01:00
Rex Dieter
7e34c68abe Merge branch 'master' into f21 2014-12-02 14:05:11 -06:00
09deb48f90 Merge remote branch 'origin/master' into f21 2014-10-15 03:39:19 +02:00
6485eb28e2 Merge remote branch 'origin/master' into f21 2014-10-15 03:14:29 +02:00
1b451fb6f4 Merge branch 'f21' of ssh://pkgs.fedoraproject.org/zarafa into f21
Conflicts:
	zarafa.spec
2014-08-25 22:49:20 +02:00
4a32efa8ec - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild 2014-08-18 11:29:49 +00:00
19 changed files with 3109 additions and 481 deletions

View file

@ -1 +1 @@
7317dd7889303abbbd30e39f04771f10 zcp-7.1.11.tar.gz
ded12c2363c7205889b8c68519140a4b zcp-7.1.14.tar.gz

View file

@ -0,0 +1,19 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa <= 7.1.10 which fixes the RFC-
violating reply of the Zarafa IMAP gateway in response to a failed SEARCH CHARSET request.
This is documented at http://tools.ietf.org/html/rfc3501#page-64: "BADCHARSET: Optionally
followed by a parenthesized list of charsets. [...]". This patch adds missing parenthesis.
Proposed to upstream via e-mail on Sun, 27 Jul 2014 23:58:01 +0200, patch was put into the
upstream ticket https://jira.zarafa.com/browse/ZCP-12504.
--- zarafa-7.1.10/gateway/IMAP.cpp 2014-05-23 15:56:37.000000000 +0200
+++ zarafa-7.1.10/gateway/IMAP.cpp.imap-badcharset 2014-07-27 23:42:30.000000000 +0200
@@ -2409,7 +2409,7 @@
if (lstSearchCriteria[1] != "WINDOWS-1252") {
iconv = new ECIConv("windows-1252", lstSearchCriteria[1]);
if (!iconv->canConvert()) {
- hr2 = HrResponse(RESP_TAGGED_NO, strTag, "[BADCHARSET WINDOWS-1252] "+strMode+"SEARCH charset not supported");
+ hr2 = HrResponse(RESP_TAGGED_NO, strTag, "[BADCHARSET (WINDOWS-1252)] "+strMode+"SEARCH charset not supported");
hr = MAPI_E_CALL_FAILED;
goto exit;
}

View file

@ -0,0 +1,93 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa <= 7.1.10 which fixes the RFC-
violating reply of the Zarafa IMAP gateway in response to a body fetch request. This is
documented at http://tools.ietf.org/html/rfc3501#page-55. Additionally this has been also
compared with the Dovecot IMAP server as a nearly (or even de facto) IMAP server reference
implementation. Please note that this is NOT a duplicate of ZCP-11590/ZCP-11739/ZCP-12365!
Wrong behaviour of Zarafa <= 7.1.10rc1-44973 (without this patch):
> A4 FETCH 1 (BODY.PEEK[HEADER.FIELDS (FROM FROM)])
< * 1 FETCH (BODY[HEADER.FIELDS (FROM FROM)] {66}
From: User1 <user1@domain.org>
From: User1 <user1@domain.org>
)
< A4 OK FETCH completed
Comparison with IMAP server Dovecot 2.2.13:
> A4 FETCH 1 (BODY.PEEK[HEADER.FIELDS (FROM FROM)])
< * 1 FETCH (BODY[HEADER.FIELDS (FROM FROM)] {34}
From: User1 <user1@domain.org>
)
< A4 OK Fetch completed.
Correct behaviour of Zarafa (after having this patch applied):
> A4 FETCH 1 (BODY.PEEK[HEADER.FIELDS (FROM FROM)])
< * 1 FETCH (BODY[HEADER.FIELDS (FROM FROM)] {34}
From: User1 <user1@domain.org>
)
< A4 OK FETCH completed
Testing: Full IMAP dialog example from the client perspective (after this patch applied):
< * OK [CAPABILITY IMAP4rev1 LITERAL+ AUTH=PLAIN] Zarafa IMAP gateway ready
> A0 LOGIN robert robert
< A0 OK [CAPABILITY IMAP4rev1 LITERAL+ CHILDREN XAOL-OPTION NAMESPACE QUOTA IDLE] LOGIN completed
> A1 LIST "" INBOX
< * LIST (\HasNoChildren) "/" "INBOX"
< A1 OK LIST completed
> A2 SELECT INBOX
< * 2 EXISTS
< * 0 RECENT
< * FLAGS (\Seen \Draft \Deleted \Flagged \Answered $Forwarded)
< * OK [PERMANENTFLAGS (\Seen \Draft \Deleted \Flagged \Answered $Forwarded)] Permanent flags
< * OK [UIDNEXT 4343] Predicted next UID
< * OK [UNSEEN 1] First unseen message
< * OK [UIDVALIDITY 9313] UIDVALIDITY value
< A2 OK [READ-WRITE] SELECT completed
> A3 SEARCH UNSEEN ALL
< * SEARCH 1 2
< A3 OK SEARCH completed
> A4 FETCH 1 (BODY.PEEK[HEADER.FIELDS (FROM FROM)])
< * 1 FETCH (BODY[HEADER.FIELDS (FROM FROM)] {34}
From: User1 <user1@domain.org>
)
< A4 OK FETCH completed
> A5 CLOSE
< A5 OK CLOSE completed
> A6 LOGOUT
< * BYE Zarafa server logging out
< A6 OK LOGOUT completed
IMPORTANT: This patch has been very carefully and extensively tested but it might not be
perfect nevertheless as I am not really a C/C++ developer. There should be a code review
by an experienced C/C++ developer before merging into Zarafa core.
Proposed to upstream via e-mail on Thu, 29 May 2014 01:55:35 +0200, patch was put into the
upstream ticket https://jira.zarafa.com/browse/ZCP-12398.
--- zarafa-7.1.10/gateway/IMAP.cpp 2014-05-12 12:06:03.000000000 +0200
+++ zarafa-7.1.10/gateway/IMAP.cpp.imap-fetch-body 2014-05-29 00:49:29.000000000 +0200
@@ -5253,10 +5253,21 @@
} else {
vector<string> lstReqFields;
vector<string>::iterator iterReqField;
+ vector<string>::iterator r, w;
+ set<string> tmpset;
// Get fields as vector
lstReqFields = tokenize(strFields, " ");
+ // Make elements of vector unique
+ for(r = lstReqFields.begin(), w = lstReqFields.begin(); r != lstReqFields.end(); ++r) {
+ if(tmpset.insert(*r).second) {
+ *w++ = *r;
+ }
+ }
+
+ lstReqFields.erase(w, lstReqFields.end());
+
// Output headers specified, in order of field set
for(iterReqField = lstReqFields.begin(); iterReqField != lstReqFields.end(); iterReqField++) {
for(iterField = lstFields.begin(); iterField != lstFields.end(); iterField++) {

View file

@ -4,6 +4,9 @@ broken on the given system and/or architecture. Interestingly that patch is not
in 2012 the first time, proposed them as a patch to Zarafa and got merged. With a recent Zarafa release it
seems they silently removed it again...
Proposed to upstream via e-mail on Fri, 11 Jul 2014 01:03:43 +0200, patch was put into the upstream ticket
https://jira.zarafa.com/browse/ZCP-12463.
--- zarafa-7.1.10/ECtools/zarafa-search/Makefile.am 2014-05-23 15:03:49.000000000 +0200
+++ zarafa-7.1.10/ECtools/zarafa-search/Makefile.am.kyotocabinet 2014-07-10 21:48:42.000000000 +0200
@@ -1,4 +1,8 @@

View file

@ -1,446 +0,0 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa <= 7.1.10 which implements much more
fine granulated configuration settings for SSL/TLS protocol and cipher enabling and disabling. The
currently available "ssl_enable_v2" setting allows either to disable SSLv2 (and enables SSLv3 only
instead) or to enable all, thus SSLv2, SSLv3, TLSv1, TLSv1.1 and TLSv1.2 (TLSv1.1 and TLSv1.2 only
if Zarafa was linked against OpenSSL 1.0.1 or later). Since SSLv2 has known protocol weaknesses it
never should be enabled - but for Zarafa it currently must be enabled to support TLSv1 and better.
This patch introduces the new setting "ssl_protocols" which replaces "ssl_enable_v2". The default
is "!SSLv2" to simply disable SSLv2 by default. The setting can be filled either with SSL protocols
that shall be enabled and/or disabled, e.g. "SSLv3 TLSv1" or "!SSLv2 !SSLv3". However only the more
usual disable/exclude option should be used as this does not exclude future protocols by default.
Further this patch introduces the completely new setting "ssl_ciphers". This one allows to set SSL
cipher suites. Right now, all SSL ciphers are accepted which is just weak or might Zarafa even make
even vulnerable to known SSL attacks. The German Federal Office for Information Security (BSI) says
that RC4 should not be used anymore - but Zarafa does it by default. And without this patch there
is also no way for Zarafa administrators to avoid that. Indeed this setting has the risk to get the
administrators ending up in a cipher mismatch between different systems but this new setting still
could be declared as officially unsupported and only for the brave ones who know what they do. Thus
the default is already set to something less weak than before but still below BSI recommendations.
Finally this patch introduces the also new setting "ssl_prefer_server_ciphers". It does what it is
named after: When choosing a cipher during an SSL/TLS handshake, normally the client's preference
is used. If this setting is enabled, the server's preference will be used instead. This comes handy
to administrators for strange cipher orderings required for special configurations and clients - or
new weaknesses where workarounds are required for the time being.
Testing: Configure zarafa-gateway, zarafa-ical and zarafa-server for cleartext and SSL as usual.
Try to login via POP3S, IMAPS, CalDAV-SSL and MAPI in SOAP over HTTPS. Change SSL protocols and the
ciphers to something more weak ("SSLv2" and "LOW") or to something more strong ("TLSv1.2" and e.g.
"HIGH"). During all my tests I did not figure out any newly introduced issue or Zarafa breakage.
Important: The technical implementation of this patch might be not perfect as I am not really a C/
C++ developer. The logic and the implementation is heavily based on Dovecot, Postfix and hints from
https://docs.fedoraproject.org/en-US/Fedora_Security_Team/html/Defensive_Coding/. There should be
a code review and code clean up by an experienced C/C++ developer before merging into Zarafa core.
This patch should be only applied in conjuction with the POP3 RESP-CODES and AUTH-RESP-CODE patch,
the POP3 CAPA (CAPABILITIES) patch as well as the POP3 STLS (STARTTLS) patch applied before.
--- zarafa-7.1.10/caldav/CalDAV.cpp 2014-05-23 15:56:36.000000000 +0200
+++ zarafa-7.1.10/caldav/CalDAV.cpp.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -220,7 +220,9 @@
{ "log_timestamp", "1" },
{ "ssl_private_key_file", "/etc/zarafa/ical/privkey.pem" },
{ "ssl_certificate_file", "/etc/zarafa/ical/cert.pem" },
- { "ssl_enable_v2", "no" },
+ { "ssl_protocols", "!SSLv2" },
+ { "ssl_ciphers", "ALL:!LOW:!SSLv2:!EXP:!aNULL" },
+ { "ssl_prefer_server_ciphers", "no" },
{ "ssl_verify_client", "no" },
{ "ssl_verify_file", "" },
{ "ssl_verify_path", "" },
--- zarafa-7.1.10/common/ECChannel.cpp 2014-05-23 15:56:36.000000000 +0200
+++ zarafa-7.1.10/common/ECChannel.cpp.rsc 2014-08-12 19:48:00.000000000 +0200
@@ -92,6 +92,11 @@
HRESULT hr = hrSuccess;
char *szFile = NULL;
char *szPath = NULL;
+ char *ssl_protocols = strdup(lpConfig->GetSetting("ssl_protocols"));
+ char *ssl_ciphers = lpConfig->GetSetting("ssl_ciphers");
+ char *ssl_name;
+ int ssl_proto, ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
+ bool ssl_neg;
if (lpConfig == NULL) {
hr = MAPI_E_CALL_FAILED;
@@ -107,11 +112,79 @@
SSL_load_error_strings();
lpCTX = SSL_CTX_new(SSLv23_server_method());
SSL_CTX_set_options(lpCTX, SSL_OP_ALL);
- SSL_CTX_set_default_verify_paths(lpCTX);
- // disable SSLv2 support
- if (!parseBool(lpConfig->GetSetting("ssl_enable_v2", "", "no")))
- SSL_CTX_set_options(lpCTX, SSL_OP_NO_SSLv2);
+ ssl_name = strtok(ssl_protocols, " ");
+ while(ssl_name != NULL) {
+ if (*ssl_name != '!')
+ ssl_neg = FALSE;
+ else {
+ ssl_name++;
+ ssl_neg = TRUE;
+ }
+
+ if (strcasecmp(ssl_name, SSL_TXT_SSLV2) == 0)
+ ssl_proto = 0x01;
+ else if (strcasecmp(ssl_name, SSL_TXT_SSLV3) == 0)
+ ssl_proto = 0x02;
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1) == 0)
+ ssl_proto = 0x04;
+#ifdef SSL_TXT_TLSV1_1
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1_1) == 0)
+ ssl_proto = 0x08;
+#endif
+#ifdef SSL_TXT_TLSV1_2
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1_2) == 0)
+ ssl_proto = 0x10;
+#endif
+ else {
+ lpLogger->Log(EC_LOGLEVEL_ERROR, "Unknown protocol '%s' in ssl_protocols setting", ssl_name);
+ hr = MAPI_E_CALL_FAILED;
+ goto exit;
+ }
+
+ if (ssl_neg)
+ ssl_exclude |= ssl_proto;
+ else
+ ssl_include |= ssl_proto;
+
+ ssl_name = strtok(NULL, " ");
+ }
+
+ if (ssl_include != 0) {
+ // Exclude everything, except those that are included (and let excludes still override those)
+ ssl_exclude |= 0x1f & ~ssl_include;
+ }
+
+ if ((ssl_exclude & 0x01) != 0)
+ ssl_op |= SSL_OP_NO_SSLv2;
+ if ((ssl_exclude & 0x02) != 0)
+ ssl_op |= SSL_OP_NO_SSLv3;
+ if ((ssl_exclude & 0x04) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1;
+#ifdef SSL_OP_NO_TLSv1_1
+ if ((ssl_exclude & 0x08) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1_1;
+#endif
+#ifdef SSL_OP_NO_TLSv1_2
+ if ((ssl_exclude & 0x10) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1_2;
+#endif
+
+ if (ssl_protocols) {
+ SSL_CTX_set_options(lpCTX, ssl_op);
+ }
+
+ if (ssl_ciphers && SSL_CTX_set_cipher_list(lpCTX, ssl_ciphers) != 1) {
+ lpLogger->Log(EC_LOGLEVEL_ERROR, "Can not set SSL cipher list to '%s': %s", ssl_ciphers, ERR_error_string(ERR_get_error(), 0));
+ hr = MAPI_E_CALL_FAILED;
+ goto exit;
+ }
+
+ if (parseBool(lpConfig->GetSetting("ssl_prefer_server_ciphers"))) {
+ SSL_CTX_set_options(lpCTX, SSL_OP_CIPHER_SERVER_PREFERENCE);
+ }
+
+ SSL_CTX_set_default_verify_paths(lpCTX);
if (SSL_CTX_use_certificate_chain_file(lpCTX, lpConfig->GetSetting("ssl_certificate_file")) != 1) {
lpLogger->Log(EC_LOGLEVEL_ERROR, "SSL CTX certificate file error: %s", ERR_error_string(ERR_get_error(), 0));
--- zarafa-7.1.10/doc/manual.xml 2014-05-23 15:01:13.000000000 +0200
+++ zarafa-7.1.10/doc/manual.xml.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -4226,11 +4226,33 @@
</varlistentry>
<varlistentry>
- <term><option>server_ssl_enable_v2</option></term>
+ <term><option>server_ssl_protocols</option></term>
<listitem>
- <para>Incoming SSL connections normally are v3.</para>
- <para>Default: <replaceable>no</replaceable>
- </para>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>server_ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>server_ssl_ciphers</option></term>
+ <listitem>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>server_ssl_prefer_server_ciphers</option></term>
+ <listitem>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
+ <para>Default: <replaceable>no</replaceable></para>
</listitem>
</varlistentry>
@@ -8070,11 +8092,32 @@
</varlistentry>
<varlistentry>
- <term><option>ssl_enable_v2</option></term>
+ <term><option>ssl_protocols</option></term>
+ <listitem>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_ciphers</option></term>
+ <listitem>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_prefer_server_ciphers</option></term>
<listitem>
- <para>Accept SSLv2 only connections. SSLv2 is considered
- unsafe, and these connections should not be
- accepted.</para>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
<para>Default: <replaceable>no</replaceable></para>
</listitem>
</varlistentry>
@@ -10075,11 +10118,32 @@
</varlistentry>
<varlistentry>
- <term><option>ssl_enable_v2</option></term>
+ <term><option>ssl_protocols</option></term>
+ <listitem>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_ciphers</option></term>
+ <listitem>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_prefer_server_ciphers</option></term>
<listitem>
- <para>Accept SSLv2 only connections. SSLv2 is considered
- unsafe, and these connections should not be
- accepted.</para>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
<para>Default: <replaceable>no</replaceable></para>
</listitem>
</varlistentry>
--- zarafa-7.1.10/gateway/Gateway.cpp 2014-05-23 15:56:37.000000000 +0200
+++ zarafa-7.1.10/gateway/Gateway.cpp.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -365,7 +365,9 @@
{ "ssl_verify_client", "no" },
{ "ssl_verify_file", "" },
{ "ssl_verify_path", "" },
- { "ssl_enable_v2", "no" },
+ { "ssl_protocols", "!SSLv2" },
+ { "ssl_ciphers", "ALL:!LOW:!SSLv2:!EXP:!aNULL" },
+ { "ssl_prefer_server_ciphers", "no" },
{ "log_method", "file" },
{ "log_file", "-" },
{ "log_level", "2", CONFIGSETTING_RELOADABLE },
--- zarafa-7.1.10/installer/linux/gateway.cfg 2014-05-23 15:03:19.000000000 +0200
+++ zarafa-7.1.10/installer/linux/gateway.cfg.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -84,8 +84,14 @@
ssl_verify_file =
ssl_verify_path =
-# Accept SSLv2 only incoming connections
-ssl_enable_v2 = no
+# SSL protocols to use, set to '!SSLv2' for 'ssl_enable_v2 = no'
+ssl_protocols = !SSLv2
+
+# SSL ciphers to use, set to 'ALL' for backward compatibility
+ssl_ciphers = ALL:!LOW:!SSLv2:!EXP:!aNULL
+
+# Prefer the server's order of SSL ciphers over client's
+ssl_prefer_server_ciphers = no
# Process model, using pthreads (thread) or processes (fork)
process_model = fork
--- zarafa-7.1.10/installer/linux/ical.cfg 2014-05-23 15:03:19.000000000 +0200
+++ zarafa-7.1.10/installer/linux/ical.cfg.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -66,8 +66,14 @@
ssl_verify_file =
ssl_verify_path =
-# Accept SSLv2 only incoming connections
-ssl_enable_v2 = no
+# SSL protocols to use, set to '!SSLv2' for 'ssl_enable_v2 = no'
+ssl_protocols = !SSLv2
+
+# SSL ciphers to use, set to 'ALL' for backward compatibility
+ssl_ciphers = ALL:!LOW:!SSLv2:!EXP:!aNULL
+
+# Prefer the server's order of SSL ciphers over client's
+ssl_prefer_server_ciphers = no
##############################################################
# OTHER ICAL SETTINGS
--- zarafa-7.1.10/installer/linux/server.cfg 2014-05-23 15:03:19.000000000 +0200
+++ zarafa-7.1.10/installer/linux/server.cfg.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -154,8 +154,14 @@
# Path with CA certificates, e.g. /etc/ssl/certs
server_ssl_ca_path =
-# Accept SSLv2 only connections. Normally v3 connections are used.
-server_ssl_enable_v2 = no
+# SSL protocols to use, set to '!SSLv2' for 'server_ssl_enable_v2 = no'
+server_ssl_protocols = !SSLv2
+
+# SSL ciphers to use, set to 'ALL' for backward compatibility
+server_ssl_ciphers = ALL:!LOW:!SSLv2:!EXP:!aNULL
+
+# Prefer the server's order of SSL ciphers over client's
+server_ssl_prefer_server_ciphers = no
# Path of SSL Public keys of clients
sslkeys_path = /etc/zarafa/sslkeys
--- zarafa-7.1.10/provider/server/ECServer.cpp 2014-05-23 15:56:37.000000000 +0200
+++ zarafa-7.1.10/provider/server/ECServer.cpp.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -919,7 +919,9 @@
{ "server_ssl_key_pass", "server", CONFIGSETTING_EXACT },
{ "server_ssl_ca_file", "/etc/zarafa/ssl/cacert.pem" },
{ "server_ssl_ca_path", "" },
- { "server_ssl_enable_v2", "no" },
+ { "server_ssl_protocols", "!SSLv2" },
+ { "server_ssl_ciphers", "ALL:!LOW:!SSLv2:!EXP:!aNULL" },
+ { "server_ssl_prefer_server_ciphers", "no" },
{ "sslkeys_path", "/etc/zarafa/sslkeys" }, // login keys
// Database options
{ "database_engine", "mysql" },
--- zarafa-7.1.10/provider/server/ECSoapServerConnection.cpp 2014-05-23 15:56:37.000000000 +0200
+++ zarafa-7.1.10/provider/server/ECSoapServerConnection.cpp.rsc 2014-08-12 19:45:04.000000000 +0200
@@ -240,6 +240,11 @@
ECRESULT er = erSuccess;
int socket = SOAP_INVALID_SOCKET;
struct soap *lpsSoap = NULL;
+ char *server_ssl_protocols = strdup(m_lpConfig->GetSetting("server_ssl_protocols"));
+ char *server_ssl_ciphers = m_lpConfig->GetSetting("server_ssl_ciphers");
+ char *ssl_name;
+ int ssl_proto, ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
+ bool ssl_neg;
if(lpServerName == NULL) {
er = ZARAFA_E_INVALID_PARAMETER;
@@ -270,10 +275,79 @@
goto exit;
}
- // disable SSLv2 support
- if (!parseBool(m_lpConfig->GetSetting("server_ssl_enable_v2", "", "no")))
- SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_NO_SSLv2);
-
+ SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_ALL);
+
+ ssl_name = strtok(server_ssl_protocols, " ");
+ while(ssl_name != NULL) {
+ if (*ssl_name != '!')
+ ssl_neg = FALSE;
+ else {
+ ssl_name++;
+ ssl_neg = TRUE;
+ }
+
+ if (strcasecmp(ssl_name, SSL_TXT_SSLV2) == 0)
+ ssl_proto = 0x01;
+ else if (strcasecmp(ssl_name, SSL_TXT_SSLV3) == 0)
+ ssl_proto = 0x02;
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1) == 0)
+ ssl_proto = 0x04;
+#ifdef SSL_TXT_TLSV1_1
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1_1) == 0)
+ ssl_proto = 0x08;
+#endif
+#ifdef SSL_TXT_TLSV1_2
+ else if (strcasecmp(ssl_name, SSL_TXT_TLSV1_2) == 0)
+ ssl_proto = 0x10;
+#endif
+ else {
+ m_lpLogger->Log(EC_LOGLEVEL_FATAL, "Unknown protocol '%s' in server_ssl_protocols setting", ssl_name);
+ er = ZARAFA_E_CALL_FAILED;
+ goto exit;
+ }
+
+ if (ssl_neg)
+ ssl_exclude |= ssl_proto;
+ else
+ ssl_include |= ssl_proto;
+
+ ssl_name = strtok(NULL, " ");
+ }
+
+ if (ssl_include != 0) {
+ // Exclude everything, except those that are included (and let excludes still override those)
+ ssl_exclude |= 0x1f & ~ssl_include;
+ }
+
+ if ((ssl_exclude & 0x01) != 0)
+ ssl_op |= SSL_OP_NO_SSLv2;
+ if ((ssl_exclude & 0x02) != 0)
+ ssl_op |= SSL_OP_NO_SSLv3;
+ if ((ssl_exclude & 0x04) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1;
+#ifdef SSL_OP_NO_TLSv1_1
+ if ((ssl_exclude & 0x08) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1_1;
+#endif
+#ifdef SSL_OP_NO_TLSv1_2
+ if ((ssl_exclude & 0x10) != 0)
+ ssl_op |= SSL_OP_NO_TLSv1_2;
+#endif
+
+ if (server_ssl_protocols) {
+ SSL_CTX_set_options(lpsSoap->ctx, ssl_op);
+ }
+
+ if (server_ssl_ciphers && SSL_CTX_set_cipher_list(lpsSoap->ctx, server_ssl_ciphers) != 1) {
+ m_lpLogger->Log(EC_LOGLEVEL_FATAL, "Can not set SSL cipher list to '%s': %s", server_ssl_ciphers, ERR_error_string(ERR_get_error(), 0));
+ er = ZARAFA_E_CALL_FAILED;
+ goto exit;
+ }
+
+ if (parseBool(m_lpConfig->GetSetting("server_ssl_prefer_server_ciphers"))) {
+ SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
+ }
+
// request certificate from client, is OK if not present.
SSL_CTX_set_verify(lpsSoap->ctx, SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE, NULL);

View file

@ -15,6 +15,9 @@ Important: The technical implementation of this patch might be not perfect as I
C++ developer. There should be a code review by an experienced C/C++ developer before merging into
Zarafa core.
Proposed to upstream via e-mail on Thu, 16 Oct 2014 00:00:05 +0200, patch was put into the upstream
ticket https://jira.zarafa.com/browse/ZCP-12473.
--- zarafa-7.1.11/gateway/IMAP.cpp 2014-09-03 10:45:06.000000000 +0200
+++ zarafa-7.1.11/gateway/IMAP.cpp.plaintext_auth_localhost 2014-09-24 01:29:10.000000000 +0200
@@ -757,7 +757,7 @@

View file

@ -0,0 +1,32 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.11 which restricts replies by
zarafa-autorespond to automated processes and mailing lists according to RFC 5230, section 4.6. For
further details please have a look to http://tools.ietf.org/html/rfc5230#page-8 as well.
Proposed to upstream via e-mail on Wed, 27 Aug 2014 23:30:31 +0200, patch was put into the upstream
ticket https://jira.zarafa.com/browse/ZCP-12590.
--- zarafa-7.1.11/spooler/DAgent.cpp 2014-08-24 12:27:06.000000000 +0200
+++ zarafa-7.1.11/spooler/DAgent.cpp.vacation-headers 2014-08-27 23:20:18.000000000 +0200
@@ -1422,11 +1422,19 @@
// See if we're looping
if (lpMessageProps[0].ulPropTag == PR_TRANSPORT_MESSAGE_HEADERS_A) {
- if ( (strstr(lpMessageProps[0].Value.lpszA, "X-Zarafa-Vacation:") != NULL) ||
- (strstr(lpMessageProps[0].Value.lpszA, "Auto-Submitted:") != NULL) ||
- (strstr(lpMessageProps[0].Value.lpszA, "Precedence:") != NULL) )
+ if ( (strstr(lpMessageProps[0].Value.lpszA, "X-Zarafa-Vacation:") != NULL) || // Zarafa
+ (strstr(lpMessageProps[0].Value.lpszA, "Auto-Submitted:") != NULL) || // RFC 3834
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Id:") != NULL) || // RFC 2919
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Help:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Subscribe:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Unsubscribe:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Post:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Owner:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "List-Archive:") != NULL) || // RFC 2369
+ (strstr(lpMessageProps[0].Value.lpszA, "Precedence:") != NULL) ) // RFC 3834
// Vacation header already present, do not send vacation reply
// Precedence: list/bulk/junk, do not reply to these mails
+ // See also http://tools.ietf.org/html/rfc5230#page-8 for details
goto exit;
// save headers to a file so they can also be tested from the script we're runing
snprintf(szTemp, PATH_MAX, "%s/autorespond-headers.XXXXXX", getenv("TEMP") == NULL ? "/tmp" : getenv("TEMP"));

View file

@ -0,0 +1,44 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.11 which adds anti-loop headers
for automatic responses by zarafa-autorespond for Microsoft Exchange and all vacation(1) compatible
implementations.
For the Microsoft Exchange related part useful links are:
- http://msdn.microsoft.com/en-us/library/ee219609(v=exchg.80).aspx
- https://www.jitbit.com/maxblog/18-detecting-outlook-autoreplyout-of-office-emails-and-x-auto-response-suppress-header/
For vacation(1) compatible implementations useful links are:
- http://www.daemon-systems.org/man/vacation.1.html
- Book "sendmail" (written by Bryan Costales, Claus Assmann, George Jansen, Gregory Neil Shapiro), ISBN 0596555342
Proposed to upstream via e-mail on Wed, 27 Aug 2014 23:59:58 +0200, patch was put into the upstream
ticket https://jira.zarafa.com/browse/ZCP-12591.
--- zarafa-7.1.11/spooler/DAgent.cpp 2014-08-24 12:27:06.000000000 +0200
+++ zarafa-7.1.11/spooler/DAgent.cpp.vacation-headers2 2014-08-27 23:52:42.000000000 +0200
@@ -1469,12 +1469,25 @@
if (hr != hrSuccess)
goto exit;
- // add anti-loop header
+ // add anti-loop header for Zarafa
snprintf(szHeader, PATH_MAX, "\nX-Zarafa-Vacation: autorespond");
hr = WriteOrLogError(fd, szHeader, strlen(szHeader));
if (hr != hrSuccess)
goto exit;
+ // add anti-loop header for Exchange, see http://msdn.microsoft.com/en-us/library/ee219609(v=exchg.80).aspx
+ snprintf(szHeader, PATH_MAX, "\nX-Auto-Response-Suppress: All");
+ hr = WriteOrLogError(fd, szHeader, strlen(szHeader));
+ if (hr != hrSuccess)
+ goto exit;
+
+ // add anti-loop header for vacation(1) compatible implementations, see section 10.9 of book "sendmail" (written
+ // by Bryan Costales, Claus Assmann, George Jansen, Gregory Neil Shapiro), ISBN 0596555342
+ snprintf(szHeader, PATH_MAX, "\nPrecedence: bulk");
+ hr = WriteOrLogError(fd, szHeader, strlen(szHeader));
+ if (hr != hrSuccess)
+ goto exit;
+
if (lpMessageProps[3].ulPropTag == PR_SUBJECT_W) {
// convert as one string because of [] characters
swprintf(szwHeader, PATH_MAX, L"%ls [%ls]", szSubject, lpMessageProps[3].Value.lpszW);

View file

@ -0,0 +1,21 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa <= 7.1.11 which logs authentication
failures of Zarafa WebAccess into the error log of the webserver. This is basically a backport of
https://jira.zarafa.com/browse/WA-6908 from WebApp to WebAccess. In difference to original patch
there is no inappropriate space before a punctuation mark also known as "plenken".
Proposed to upstream via e-mail on Wed, 13 Aug 2014 22:56:09 +0200, initial patch was put into the
upstream ticket https://jira.zarafa.com/browse/ZCP-12543.
--- zarafa-7.1.11/php-webclient-ajax/client/login.php 2014-09-03 10:45:06.000000000 +0200
+++ zarafa-7.1.11/php-webclient-ajax/client/login.php 2015-02-18 01:08:13.000000000 +0100
@@ -86,6 +86,10 @@
switch($_SESSION["hresult"]){
case MAPI_E_LOGON_FAILED:
case MAPI_E_UNCONFIGURED:
+ // Print error message to error_log of webserver
+ if (!empty($_POST["username"])) {
+ error_log('user '.$_POST["username"].': authentication failure at MAPI');
+ }
echo _("Logon failed, please check your name/password.");
break;
case MAPI_E_NETWORK_ERROR:

2185
zarafa-7.1.12-gcc5.patch Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,38 @@
Patch by Robert Scheck <robert@fedoraproject.org> for zarafa >= 7.1.12 which disables weak SSLv2
and SSLv3 protocols for encrypted SOAP connections between the Zarafa services. Until (including)
the Zarafa 7.1.11 release the upstream default was to replace the SSLv23_method() that a pristine
gSOAP library ships with the "safer" SSLv3_method(). With Zarafa 7.1.12 the SSLv3_method() was
changed to SSLv23_method(). However this enables SSLv2 again (and still does not disable SSLv3).
Thus this patch disables SSLv2 and SSLv3 as well as TLS compression explicitly; similar like the
Zarafa Outlook Client which meanwhile only allows TLSv1.0 (and better).
Proposed to upstream via e-mail on Wed, 2 Apr 2014 11:35:40 +0200, initial patch was put into the
upstream ticket Ticket#2014040210000266.
--- zarafa-7.1.12/provider/common/SOAPSock.cpp 2015-04-07 13:10:13.000000000 +0200
+++ zarafa-7.1.12/provider/common/SOAPSock.cpp.gsoap-sslv3 2015-04-07 16:32:20.000000000 +0200
@@ -157,9 +157,6 @@
lpCmd->endpoint = strdup(strServerPath.c_str());
- // default allow SSLv3, TLSv1, TLSv1.1 and TLSv1.2
- lpCmd->soap->ctx = SSL_CTX_new(SSLv23_method());
-
#ifdef WITH_OPENSSL
if (strncmp("https:", lpCmd->endpoint, 6) == 0) {
// no need to add certificates to call, since soap also calls SSL_CTX_set_default_verify_paths()
@@ -183,6 +180,14 @@
lpCmd->soap->fsslverify = ssl_verify_callback_zarafa_silent;
SSL_CTX_set_verify(lpCmd->soap->ctx, SSL_VERIFY_PEER, lpCmd->soap->fsslverify);
+
+ // disable SSLv2 (according to RFC 6176) and SSLv3, leaving just TLSv1.0 (and better)
+ SSL_CTX_set_options(lpCmd->soap->ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3);
+
+#ifdef SSL_OP_NO_COMPRESSION
+ // disable TLS compression to close the CRIME attack vector (also known as CVE-2012-4929)
+ SSL_CTX_set_options(lpCmd->soap->ctx, SSL_OP_NO_COMPRESSION);
+#endif
}
#endif

View file

@ -1,4 +1,4 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa <= 7.1.9 which implements ECDHE (elliptic
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.12 which implements ECDHE (elliptic
curve diffie-hellman key exchange) support. http://en.wikipedia.org/wiki/Elliptic_curve_cryptography is
providing more information about elliptic curves.
@ -22,21 +22,24 @@ by an experienced C/C++ and OpenSSL developer before merging into Zarafa core.
This patch should be only applied after ZCP-12143 and its dependencies. However this patch might maybe
not directly apply due to some previous merge issues as mentioned in Ticket#2014030810000131.
--- zarafa-7.1.9/common/ECChannel.cpp 2014-04-13 23:46:59.000000000 +0200
+++ zarafa-7.1.9/common/ECChannel.cpp.ssl_ecdhe 2014-04-13 23:59:43.000000000 +0200
@@ -97,6 +97,9 @@
char *ssl_name;
int ssl_proto, ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
bool ssl_neg;
Proposed to upstream via e-mail on Mon, 14 Apr 2014 12:04:17 +0200, initial patch was put into upstream
ticket https://jira.zarafa.com/browse/ZCP-12237.
--- zarafa-7.1.12/common/ECChannel.cpp 2015-04-07 13:10:12.000000000 +0200
+++ zarafa-7.1.12/common/ECChannel.cpp.ssl_ecdhe 2015-04-07 17:12:15.000000000 +0200
@@ -93,6 +93,9 @@
char *ssl_ciphers = lpConfig->GetSetting("ssl_ciphers");
char *ssl_name = NULL;
int ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
+#if !defined(OPENSSL_NO_ECDH) && defined(NID_X9_62_prime256v1)
+ EC_KEY *ecdh;
+#endif
if (lpConfig == NULL) {
hr = MAPI_E_CALL_FAILED;
lpLogger->Log(EC_LOGLEVEL_ERROR, "ECChannel::HrSetCtx(): invalid parameters");
@@ -113,6 +116,16 @@
lpCTX = SSL_CTX_new(SSLv23_server_method());
SSL_CTX_set_options(lpCTX, SSL_OP_ALL);
SSL_CTX_set_options(lpCTX, SSL_OP_ALL); // enable quirk and bug workarounds
+#if !defined(OPENSSL_NO_ECDH) && defined(NID_X9_62_prime256v1)
+ ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
@ -50,20 +53,20 @@ not directly apply due to some previous merge issues as mentioned in Ticket#2014
+
ssl_name = strtok(ssl_protocols, " ");
while(ssl_name != NULL) {
if (*ssl_name != '!')
--- zarafa-7.1.9/provider/server/ECSoapServerConnection.cpp 2014-04-13 23:46:59.000000000 +0200
+++ zarafa-7.1.9/provider/server/ECSoapServerConnection.cpp.ssl_ecdhe 2014-04-14 00:00:54.000000000 +0200
@@ -245,6 +245,9 @@
char *ssl_name;
int ssl_proto, ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
bool ssl_neg;
int ssl_proto = 0;
--- zarafa-7.1.12/provider/server/ECSoapServerConnection.cpp 2015-04-07 13:10:13.000000000 +0200
+++ zarafa-7.1.12/provider/server/ECSoapServerConnection.cpp.ssl_ecdhe 2015-04-07 17:13:23.000000000 +0200
@@ -235,6 +235,9 @@
char *server_ssl_ciphers = m_lpConfig->GetSetting("server_ssl_ciphers");
char *ssl_name = NULL;
int ssl_op = 0, ssl_include = 0, ssl_exclude = 0;
+#if !defined(OPENSSL_NO_ECDH) && defined(NID_X9_62_prime256v1)
+ EC_KEY *ecdh;
+#endif
if(lpServerName == NULL) {
er = ZARAFA_E_INVALID_PARAMETER;
@@ -277,6 +280,16 @@
free(server_ssl_ciphers);
@@ -268,6 +271,16 @@
SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_ALL);
@ -79,4 +82,4 @@ not directly apply due to some previous merge issues as mentioned in Ticket#2014
+
ssl_name = strtok(server_ssl_protocols, " ");
while(ssl_name != NULL) {
if (*ssl_name != '!')
int ssl_proto = 0;

View file

@ -0,0 +1,123 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.12 which re-adds the whole
documentation that was initially proposed to upstream but lost when this feature was backported
from Zarafa 7.2 to the 7.1 series.
Proposed to upstream via e-mail on Sat, 8 Mar 2014 14:30:29 +0100, initial patch was put into
the upstream ticket https://jira.zarafa.com/browse/ZCP-12143.
--- zarafa-7.1.12/doc/manual.xml 2015-04-07 12:03:31.000000000 +0200
+++ zarafa-7.1.12/doc/manual.xml.ssl_protocols_ciphers 2015-04-07 17:05:47.000000000 +0200
@@ -4226,14 +4226,35 @@
</varlistentry>
<varlistentry>
- <term><option>server_ssl_enable_v2</option></term>
+ <term><option>server_ssl_protocols</option></term>
<listitem>
- <para>Incoming SSL connections normally are v3.</para>
- <para>Default: <replaceable>no</replaceable>
- </para>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>server_ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>server_ssl_ciphers</option></term>
+ <listitem>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><option>server_ssl_prefer_server_ciphers</option></term>
+ <listitem>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
+ <para>Default: <replaceable>no</replaceable></para>
+ </listitem>
+ </varlistentry>
</variablelist>
</refsection>
@@ -8090,11 +8111,32 @@
</varlistentry>
<varlistentry>
- <term><option>ssl_enable_v2</option></term>
+ <term><option>ssl_protocols</option></term>
+ <listitem>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_ciphers</option></term>
<listitem>
- <para>Accept SSLv2 only connections. SSLv2 is considered
- unsafe, and these connections should not be
- accepted.</para>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_prefer_server_ciphers</option></term>
+ <listitem>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
<para>Default: <replaceable>no</replaceable></para>
</listitem>
</varlistentry>
@@ -10091,11 +10133,32 @@
</varlistentry>
<varlistentry>
- <term><option>ssl_enable_v2</option></term>
+ <term><option>ssl_protocols</option></term>
+ <listitem>
+ <para>Disabled or enabled protocol names. Supported protocol names
+ are <replaceable>SSLv2</replaceable>, <replaceable>SSLv3</replaceable>
+ and <replaceable>TLSv1</replaceable>. If Zarafa was linked against
+ OpenSSL 1.0.1 or later there is additional support for the new protocols
+ <replaceable>TLSv1.1</replaceable> and <replaceable>TLSv1.2</replaceable>.
+ To exclude both, SSLv2 and SSLv3 set <option>ssl_protocols</option>
+ to <replaceable>!SSLv2 !SSLv3</replaceable>. SSLv2 is considered unsafe
+ and these connections should not be accepted.</para>
+ <para>Default: <replaceable>!SSLv2</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_ciphers</option></term>
+ <listitem>
+ <para>SSL ciphers to use, set to <replaceable>ALL</replaceable> for backward compatibility.</para>
+ <para>Default: <replaceable>ALL:!LOW:!SSLv2:!EXP:!aNULL</replaceable></para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><option>ssl_prefer_server_ciphers</option></term>
<listitem>
- <para>Accept SSLv2 only connections. SSLv2 is considered
- unsafe, and these connections should not be
- accepted.</para>
+ <para>Prefer the server's order of SSL ciphers over client's.</para>
<para>Default: <replaceable>no</replaceable></para>
</listitem>
</varlistentry>

View file

@ -0,0 +1,56 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa 7.1.12 which backports the fix for
CVE-2015-3436. Guido Günther detected and reported that replacing "/tmp/zarafa-upgrade-lock" by
a symlink makes the zarafa-server process following that symlink and thus allows to overwrite
arbitrary files in the filesystem (assuming zarafa-server runs as root which is not the case by
default at Fedora, but it is the upstream default). One just needs write permissions in /tmp and
wait until the zarafa-server is restarted. https://bugzilla.redhat.com/show_bug.cgi?id=1222151
contains further information. The difference between this backport and the original diff is that
the log levels were reworked from Zarafa 7.1.x to 7.2.x (which this backport takes care of).
--- zarafa-7.1.12/provider/server/ECServer.cpp 2015-05-08 15:09:05.000000000 +0200
+++ zarafa-7.1.12/provider/server/ECServer.cpp.upgrade-lock 2015-05-18 23:05:00.000000000 +0200
@@ -101,6 +101,8 @@
// have to go with the safe value which is for 64bit.
#define MYSQL_MIN_THREAD_STACK (256*1024)
+const char upgrade_lock_file[] = "/tmp/zarafa-upgrade-lock";
+
extern ECSessionManager* g_lpSessionManager;
// scheduled functions
@@ -832,7 +834,7 @@
// SIGSEGV backtrace support
stack_t st = {0};
struct sigaction act = {{0}};
- FILE *tmplock = NULL;
+ int tmplock = -1;
struct stat dir = {0};
struct passwd *runasUser = NULL;
@@ -1288,8 +1290,9 @@
m_bDatabaseUpdateIgnoreSignals = true;
// add a lock file to disable the /etc/init.d scripts
- tmplock = fopen("/tmp/zarafa-upgrade-lock","w");
- if (!tmplock)
+ tmplock = open(upgrade_lock_file, O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+
+ if (tmplock == -1)
g_lpLogger->Log(EC_LOGLEVEL_FATAL, "WARNING: Unable to place upgrade lockfile: %s", strerror(errno));
#ifdef EMBEDDED_MYSQL
@@ -1314,9 +1317,11 @@
er = lpDatabaseFactory->UpdateDatabase(m_bForceDatabaseUpdate, dbError);
// remove lock file
- if (tmplock) {
- fclose(tmplock);
- unlink("/tmp/zarafa-upgrade-lock");
+ if (tmplock != -1) {
+ if (unlink(upgrade_lock_file) == -1)
+ g_lpLogger->Log(EC_LOGLEVEL_FATAL, "WARNING: Unable to delete upgrade lockfile (%s): %s", upgrade_lock_file, strerror(errno));
+
+ close(tmplock);
}
if(er == ZARAFA_E_INVALID_VERSION) {

View file

@ -0,0 +1,18 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa WebAccess >= 7.1.12 which fixes the issue that the configured
default font from the settings (for HTML e-mails) is just not applied when creating a new e-mail. This issue is also known
to Zarafa since at least April 2011 - but will be not fixed at upstream; see also: https://jira.zarafa.com/browse/ZCP-7492
This patch is is free software: You can redistribute it and/or modify it under the terms of the GNU Affero General
Public License, version 3, as published by the Free Software Foundation.
--- zarafa-7.1.12/php-webclient-ajax/client/layout/dialogs/standard/createmail.php 2015-05-08 15:09:05.000000000 +0200
+++ zarafa-7.1.12/php-webclient-ajax/client/layout/dialogs/standard/createmail.php.rsc 2015-07-12 04:26:59.000000000 +0200
@@ -381,7 +381,7 @@
//set the default font-family for editorarea
var font_family = parentWebclient.settings.get("createmail/maildefaultfont","Arial");
- document.fckEditor.EditorDocument.body.style.fontFamily = font_family;
+ document.fckEditor.EditorDocument.body.getElementsByTagName("p")[0].style.fontFamily = font_family;
// set content of body if it is passed in URL
<? if(isset($_GET["body"])) { ?>

View file

@ -0,0 +1,58 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.12 which fixes the fix that fixes CVE-2014-0103. Ush,
that was complicated, so: CVE-2014-0103 exists because Zarafa WebAccess < 7.1.10 and Zarafa WebApp < 1.6 storing passwords
in cleartext on server (in the PHP session). Zarafa solved this flaw by using openssl_encrypt() and openssl_decrypt() from
PHP's OpenSSL bindings. However these functions are only available in PHP 5.3 or later. Without this patch suggestion, any
older but still supported Linux distribution like Red Hat Enterprise Linux 5 or SuSE Linux Enterprise Server 10 (which are
both shipping PHP < 5.3 by default) would still be left vulnerable.
Given that I am personally more a fan of OpenSSL rather mcrypt, I am not absolutely sure if this implementation is really
correct even it works fine on my test system. So please explicitly review this code to avoid introducing another security
flaw by trying to fix one! A thing that I generally question for myself is the usage of "des-ede3-cbc"/"MCRYPT_TRIPLEDES"
instead of e.g. MCRYPT_RIJNDAEL_128. Given that this decision was initially made by Zarafa I am just following that here.
Important: To get this patch really powerful the install-time requirement needs to be adapted like this (this example is
based on Fedora's build system so the macros %{?rhel} and %{?fedora} might not exist at Zarafa but need to be replaced by
other macros):
%if 0%{?rhel}%{?fedora} < 6
Requires: php-mcrypt
%else
Requires: php-openssl
%endif
This requires php-openssl (provided by php-common) on RHEL 6 (and later) and php-mcrypt (separate package) before RHEL 6.
Proposed to upstream via e-mail on Thu, 5 Jun 2014 00:24:32 +0200, initial patch was put into the (non-disclosed) upstream
ticket https://jira.zarafa.com/browse/ZCP-12407.
--- zarafa-7.1.12/php-webclient-ajax/index.php 2015-04-07 13:10:13.000000000 +0200
+++ zarafa-7.1.12/php-webclient-ajax/index.php.webaccess-mcrypt 2015-04-07 16:22:23.000000000 +0200
@@ -135,6 +135,8 @@
} else {
$_SESSION['password'] = openssl_encrypt($password,"des-ede3-cbc",PASSWORD_KEY,0,PASSWORD_IV);
}
+ } elseif(function_exists("mcrypt_encrypt")) {
+ $_SESSION['password'] = base64_encode(mcrypt_encrypt(MCRYPT_TRIPLEDES, PASSWORD_KEY, $password, MCRYPT_MODE_CBC, PASSWORD_IV));
} else {
$_SESSION["password"] = $password;
}
--- zarafa-7.1.12/php-webclient-ajax/server/core/class.mapisession.php 2015-04-07 13:10:14.000000000 +0200
+++ zarafa-7.1.12/php-webclient-ajax/server/core/class.mapisession.php.webaccess-mcrypt 2015-04-07 16:23:58.000000000 +0200
@@ -132,6 +132,8 @@
} else {
$password = openssl_decrypt($password,"des-ede3-cbc",PASSWORD_KEY,0,PASSWORD_IV);
}
+ } elseif(function_exists("mcrypt_decrypt")) {
+ $password = rtrim(mcrypt_decrypt(MCRYPT_TRIPLEDES, PASSWORD_KEY, base64_decode($password), MCRYPT_MODE_CBC, PASSWORD_IV), "\0");
}
// logon
$this->session = mapi_logon_zarafa($username, $password, $server, $sslcert_file, $sslcert_pass);
@@ -144,6 +146,8 @@
} else {
$password = openssl_encrypt($password,"des-ede3-cbc",PASSWORD_KEY,0,PASSWORD_IV);
}
+ } elseif(function_exists("mcrypt_encrypt")) {
+ $password = base64_encode(mcrypt_encrypt(MCRYPT_TRIPLEDES, PASSWORD_KEY, $password, MCRYPT_MODE_CBC, PASSWORD_IV));
}
if ($result == NOERROR && $this->session !== false){

View file

@ -0,0 +1,30 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa WebAccess >= 6.00 which ensures proper escaping of
multiple user properties like fullname/realname, username and e-mail address. Without this patch a user having
the unlikely fullname/realname '<script>alert("Hello world");</script>' (without the '') is not properly escaped
on all places within the Zarafa WebAccess; this might be an XSS flaw.
This patch is is free software: You can redistribute it and/or modify it under the terms of the GNU Affero General
Public License, version 3, as published by the Free Software Foundation.
--- zarafa-7.1.12/php-webclient-ajax/client/webclient.php 2015-05-08 15:09:05.000000000 +0200
+++ zarafa-7.1.12/php-webclient-ajax/client/webclient.php.webaccess-xss 2015-07-09 23:42:35.000000000 +0200
@@ -220,7 +220,7 @@
dhtml.executeEvent(document.body, "ZarafaDnD:initDragMsgsToDesktop");
}
- webclient.setUserInfo("<?=addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getUserName()))?>", "<?=addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getFullName()))?>", "<?=bin2hex($GLOBALS["mapisession"]->getUserEntryid())?>" , "<?=addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getEmail()))?>");
+ webclient.setUserInfo("<?=htmlspecialchars(addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getUserName())))?>", "<?=htmlspecialchars(addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getFullName())))?>", "<?=bin2hex($GLOBALS["mapisession"]->getUserEntryid())?>" , "<?=htmlspecialchars(addslashes(windows1252_to_utf8($GLOBALS["mapisession"]->getEmail())))?>");
// Store current sessionid in sessionid variable
webclient.sessionid = "<?=session_id()?>";
--- zarafa-7.1.12/php-webclient-ajax/client/core/layoutmanager.js 2015-05-08 15:09:06.000000000 +0200
+++ zarafa-7.1.12/php-webclient-ajax/client/core/layoutmanager.js.webaccess-xss 2015-07-09 23:43:39.000000000 +0200
@@ -324,7 +324,7 @@
var loggedon = dhtml.getElementById("loggedon");
var loggedonas = document.createElement("span");
- loggedonas.innerHTML = _("you are logged on as") + " " + escapeHtml(webclient.fullname);
+ loggedonas.innerHTML = _("you are logged on as") + " " + webclient.fullname;
loggedon.appendChild(loggedonas);
var seperator = document.createElement("span");

298
zarafa-7.1.13-ssl_dhe.patch Normal file
View file

@ -0,0 +1,298 @@
Patch by Robert Scheck <robert@fedoraproject.org> for Zarafa >= 7.1.13 which implements DHE aka EDH
(diffie-hellman key exchange) support. https://en.wikipedia.org/wiki/Diffie-Hellman_key_exchange is
providing more information about Perfect Forward Secrecy (PFS). This implementation might need some
more resources compared to ECDHE, however not all servers and/or clients are supporting it through;
e.g. Red Hat Enterprise Linux 5 (and derivates). The prime length of 1024, 2048, 3072, 4096, 6144
and 8192 bits are based on the private key size to avoid any static DH parameters. Please be aware
that this patch may cause issues with some older SSL/TLS clients, mostly Java 7 or earlier, that do
not support primes larger than 1024 bits.
Suggestions for testing; run the following openssl(1) commands before and after applying this patch:
1. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:110 -starttls pop3 2>&1 | grep Cipher
2. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:143 -starttls imap 2>&1 | grep Cipher
3. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:237 2>&1 | grep Cipher
4. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:993 2>&1 | grep Cipher
5. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:995 2>&1 | grep Cipher
6. echo QUIT | openssl s_client -cipher 'kEDH:ALL' -connect <host>:8443 2>&1 | grep Cipher
After applying this patch the output should contain e.g. "DHE-RSA-AES256-GCM-SHA384" on a Red Hat
Enterprise Linux 6 (and derivates). Without this patch the result is e.g. "AES256-GCM-SHA384". Note
that ZCP-12237 is maybe having influence on the result depending on the exact test case.
Important: As https://www.mail-archive.com/haproxy@formilux.org/msg13274.html is the origin for this
patch (a HAProxy patch suggestion, which itself bases on mod_ssl of Apache httpd), the licensing is
likely a combination out of the Apache License, Version 2.0, the GNU General Public License, version
2 (or later) and the GNU Affero General Public License, version 3 (and thus excludes dual-licensing
situations such as at the upstream of Zarafa).
This patch should be only applied after ZCP-12237 and its dependencies.
--- zarafa-7.1.13/common/ECChannel.cpp 2015-07-30 01:01:07.212313822 +0200
+++ zarafa-7.1.13/common/ECChannel.cpp.ssl_dhe 2015-07-30 02:05:36.045747555 +0200
@@ -85,6 +85,119 @@
// because of statics
SSL_CTX* ECChannel::lpCTX = NULL;
+#if !defined(OPENSSL_NO_DH)
+static DH *ssl_get_dh_1024(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc2409_prime_1024(NULL);
+ // See RFC 2409, Section 6 "Oakley Groups" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_2048(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_2048(NULL);
+ // See RFC 3526, Section 3 "2048-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_3072(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_3072(NULL);
+ // See RFC 3526, Section 4 "3072-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_4096(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_4096(NULL);
+ // See RFC 3526, Section 5 "4096-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_6144(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_6144(NULL);
+ // See RFC 3526, Section 6 "6144-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_8192(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_8192(NULL);
+ // See RFC 3526, Section 7 "8192-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+// Returns Diffie-Hellman parameters matching the private key length
+static DH *ssl_get_tmp_dh(SSL *ssl, int exporting, int keylen) {
+ DH *dh = NULL;
+ EVP_PKEY *pkey = SSL_get_privatekey(ssl);
+ int type = pkey ? EVP_PKEY_type(pkey->type) : EVP_PKEY_NONE;
+
+ if (type == EVP_PKEY_RSA || type == EVP_PKEY_DSA) {
+ keylen = EVP_PKEY_bits(pkey);
+ }
+
+ if (keylen >= 8192) {
+ dh = ssl_get_dh_8192();
+ } else if (keylen >= 6144) {
+ dh = ssl_get_dh_6144();
+ } else if (keylen >= 4096) {
+ dh = ssl_get_dh_4096();
+ } else if (keylen >= 3072) {
+ dh = ssl_get_dh_3072();
+ } else if (keylen >= 2048) {
+ dh = ssl_get_dh_2048();
+ } else {
+ dh = ssl_get_dh_1024();
+ }
+
+ return dh;
+}
+#endif
+
HRESULT ECChannel::HrSetCtx(ECConfig *lpConfig, ECLogger *lpLogger) {
HRESULT hr = hrSuccess;
char *szFile = NULL;
@@ -116,6 +229,11 @@
SSL_CTX_set_options(lpCTX, SSL_OP_ALL); // enable quirk and bug workarounds
+#if !defined(OPENSSL_NO_DH)
+ SSL_CTX_set_options(lpCTX, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_tmp_dh_callback(lpCTX, ssl_get_tmp_dh);
+#endif
+
#if !defined(OPENSSL_NO_ECDH) && defined(NID_X9_62_prime256v1)
ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
--- zarafa-7.1.13/provider/server/ECSoapServerConnection.cpp 2015-07-30 01:01:07.212313822 +0200
+++ zarafa-7.1.13/provider/server/ECSoapServerConnection.cpp.ssl_dhe 2015-07-30 02:05:54.658626465 +0200
@@ -165,6 +165,119 @@
return nRet;
}
+#if !defined(OPENSSL_NO_DH)
+static DH *ssl_get_dh_1024(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc2409_prime_1024(NULL);
+ // See RFC 2409, Section 6 "Oakley Groups" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_2048(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_2048(NULL);
+ // See RFC 3526, Section 3 "2048-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_3072(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_3072(NULL);
+ // See RFC 3526, Section 4 "3072-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_4096(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_4096(NULL);
+ // See RFC 3526, Section 5 "4096-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_6144(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_6144(NULL);
+ // See RFC 3526, Section 6 "6144-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+static DH *ssl_get_dh_8192(void) {
+ DH *dh = DH_new();
+ if (dh) {
+ dh->p = get_rfc3526_prime_8192(NULL);
+ // See RFC 3526, Section 7 "8192-bit MODP Group" for the reason why we use 2 as a generator
+ BN_dec2bn(&dh->g, "2");
+ if (!dh->p || !dh->g) {
+ DH_free(dh);
+ dh = NULL;
+ }
+ }
+ return dh;
+}
+
+// Returns Diffie-Hellman parameters matching the private key length
+static DH *ssl_get_tmp_dh(SSL *ssl, int exporting, int keylen) {
+ DH *dh = NULL;
+ EVP_PKEY *pkey = SSL_get_privatekey(ssl);
+ int type = pkey ? EVP_PKEY_type(pkey->type) : EVP_PKEY_NONE;
+
+ if (type == EVP_PKEY_RSA || type == EVP_PKEY_DSA) {
+ keylen = EVP_PKEY_bits(pkey);
+ }
+
+ if (keylen >= 8192) {
+ dh = ssl_get_dh_8192();
+ } else if (keylen >= 6144) {
+ dh = ssl_get_dh_6144();
+ } else if (keylen >= 4096) {
+ dh = ssl_get_dh_4096();
+ } else if (keylen >= 3072) {
+ dh = ssl_get_dh_3072();
+ } else if (keylen >= 2048) {
+ dh = ssl_get_dh_2048();
+ } else {
+ dh = ssl_get_dh_1024();
+ }
+
+ return dh;
+}
+#endif
+
ECSoapServerConnection::ECSoapServerConnection(ECConfig* lpConfig, ECLogger* lpLogger)
{
m_lpConfig = lpConfig;
@@ -271,6 +384,11 @@
SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_ALL);
+#if !defined(OPENSSL_NO_DH)
+ SSL_CTX_set_options(lpsSoap->ctx, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_tmp_dh_callback(lpsSoap->ctx, ssl_get_tmp_dh);
+#endif
+
#if !defined(OPENSSL_NO_ECDH) && defined(NID_X9_62_prime256v1)
ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);

View file

@ -1,6 +1,6 @@
%global beta_or_rc 0
%global actual_release 2
%global svnrevision 46050
%global actual_release 1
%global svnrevision 51822
%global with_search 1
%global with_ldap 1
%global with_xmlto 1
@ -31,7 +31,7 @@
Summary: Open Source Edition of the Zarafa Collaboration Platform
Name: zarafa
Version: 7.1.11
Version: 7.1.14
%if %{beta_or_rc}
Release: 0.%{actual_release}.svn%{svnrevision}%{?dist}
%else
@ -57,9 +57,21 @@ Source3: %{name}-webaccess.conf
Patch0: zarafa-7.1.11-rpath.patch
Patch1: zarafa-7.1.11-php-unbundle.patch
Patch2: zarafa-7.1.10-kyotocabinet.patch
Patch3: zarafa-7.1.10-ssl_protocols_ciphers.patch
Patch4: zarafa-7.1.9-ssl_ecdhe.patch
Patch3: zarafa-7.1.12-ssl_protocols_ciphers.patch
Patch4: zarafa-7.1.12-ssl_ecdhe.patch
Patch5: zarafa-7.1.11-plaintext_auth_localhost.patch
Patch6: zarafa-7.1.10-imap-badcharset.patch
Patch7: zarafa-7.1.10-imap-fetch-body.patch
Patch8: zarafa-7.1.11-vacation-headers.patch
Patch9: zarafa-7.1.11-vacation-headers2.patch
Patch10: zarafa-7.1.11-webaccess-fail2ban.patch
Patch11: zarafa-7.1.12-webaccess-mcrypt.patch
Patch12: zarafa-7.1.12-gsoap-sslv3.patch
Patch14: zarafa-7.1.12-upgrade-lock.patch
Patch15: zarafa-7.1.12-gcc5.patch
Patch16: zarafa-7.1.12-webaccess-xss.patch
Patch17: zarafa-7.1.12-webaccess-defaultfont.patch
Patch18: zarafa-7.1.13-ssl_dhe.patch
BuildRequires: bison
BuildRequires: gcc-c++
@ -315,7 +327,7 @@ Group: Applications/Productivity
Requires: httpd, php-mapi = %{version}-%{release}
# Bug: php53 from RHEL 5 does not provide php (#717158)
%if 0%{?rhel} == 5
Requires: mod_php >= 4.3
Requires: mod_php >= 4.3, php-mcrypt
%else
Requires: php >= 4.3, php-openssl
%endif
@ -373,6 +385,8 @@ PHP projects, using the MAPI functions like a normal MAPI program.
%package -n python-MAPI
Summary: The Python MAPI extension by Zarafa
Group: Development/Languages
Provides: python-mapi = %{version}-%{release}
Provides: python-mapi%{?_isa} = %{version}-%{release}
%description -n python-MAPI
The python-MAPI package contains the Python MAPI extension to provide the
@ -391,6 +405,20 @@ touch -c -r aclocal.m4.rpath aclocal.m4
%patch3 -p1 -b .ssl_protocols_ciphers
%patch4 -p1 -b .ssl_ecdhe
%patch5 -p1 -b .disable_plaintext_auth-localhost
%patch6 -p1 -b .imap-badcharset
%patch7 -p1 -b .imap-fetch-body
%patch8 -p1 -b .vacation-headers
%patch9 -p1 -b .vacation-headers2
%patch10 -p1 -b .webaccess-fail2ban
%patch11 -p1 -b .webaccess-mcrypt
%patch12 -p1 -b .gsoap-sslv3
%patch14 -p1 -b .upgrade-lock
%patch15 -p1 -b .gcc5
touch -c -r autoconf/boost.m4.gcc5 autoconf/boost.m4
%patch16 -p1 -b .webaccess-xss
%patch17 -p1 -b .webaccess-defaultfont
rm -f php-webclient-ajax/{.,*,*/*,*/*/*/*}/*.webaccess-*
%patch18 -p1 -b .ssl_dhe
%build
%if 0%{?rhel}%{?fedora} < 6
@ -473,6 +501,10 @@ done
# Move the logrotate configuration file to its correct place
install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}
%if 0%{?fedora} >= 16 || 0%{?rhel} >= 7
sed -e 's/}/\tsu root root\n}/' -i $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}
touch -c -r %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/logrotate.d/%{name}
%endif
# Move the userscripts to their correct place and symlink them
mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}/userscripts/
@ -534,7 +566,7 @@ mkdir -p $RPM_BUILD_ROOT%{_datadir}/%{name}-webaccess/plugins/
# Remove unwanted language connectors and webaccess files
rm -f $RPM_BUILD_ROOT%{_datadir}/%{name}-webaccess/client/widgets/fckeditor/editor/dialog/fck_spellerpages/spellerpages/server-scripts/spellchecker.{cfm,pl}
rm -f $RPM_BUILD_ROOT%{_datadir}/%{name}-webaccess/{.htaccess,%{name}-webaccess.conf,senddocument.php}
rm -f $RPM_BUILD_ROOT%{_datadir}/%{name}-webaccess/{.htaccess,%{name}-webaccess.conf}
# Remove flash-based multi-attachment upload (missing source)
%if %{no_multiupload}
@ -725,7 +757,8 @@ fi
%files common
%defattr(-,root,root,-)
%doc installer/licenseagreement/AGPL-3
%{!?_licensedir:%global license %%doc}
%license installer/licenseagreement/AGPL-3
%dir %{_sysconfdir}/%{name}/
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
%config(noreplace) %{_sysconfdir}/sysconfig/%{name}
@ -762,8 +795,6 @@ fi
%{_libdir}/libicalmapi.so
%{_libdir}/libinetmapi.so
%{_libdir}/libmapi.so
%{_libdir}/libmapicalendar.so
%{_libdir}/libmapitimezone.so
%{_libdir}/libcommon_mapi.a
%{_libdir}/libcommon_service.a
%{_libdir}/libcommon_ssl.a
@ -772,10 +803,8 @@ fi
%{_libdir}/libzarafasync.so
%{_includedir}/icalmapi/
%{_includedir}/inetmapi/
%{_includedir}/mapitimezone/
%{_includedir}/mapi4linux/
%{_includedir}/libfreebusy/
%{_includedir}/libmapicalendar/
%{_includedir}/libzarafasync/
%{_includedir}/%{name}/
%{_libdir}/pkgconfig/%{name}.pc
@ -920,12 +949,11 @@ fi
%{_libdir}/libicalmapi.so.*
%{_libdir}/libinetmapi.so.*
%{_libdir}/libmapi.so.*
%{_libdir}/libmapicalendar.so.*
%{_libdir}/libmapitimezone.so.*
%files -n php-mapi
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/php.d/%{ini_name}
%config(noreplace) %{_sysconfdir}/%{name}/php-mapi.cfg
%{_datadir}/php/mapi/
%{_libdir}/php/modules/mapi.so
@ -934,6 +962,28 @@ fi
%{python_sitearch}/*
%changelog
* Tue Nov 10 2015 Robert Scheck <robert@fedoraproject.org> 7.1.14-1
- Upgrade to 7.1.14 (#1263006)
* Wed Aug 05 2015 Robert Scheck <robert@fedoraproject.org> 7.1.13-1
- Upgrade to 7.1.13
- Added patch to fix a possible XSS situation in WebAccess
- Added patch to avoid non-working default font in WebAccess
- Added patch to implement DHE/EDH support (aside of ECDHE)
* Wed Jul 01 2015 Robert Scheck <robert@fedoraproject.org> 7.1.12-3
- Added patch to build using GCC 5.x
* Mon May 18 2015 Robert Scheck <robert@fedoraproject.org> 7.1.12-2
- Upgrade to 7.1.12 (re-released)
- Backported patch from Zarafa 7.2 to fix CVE-2015-3436 (#1222151)
* Tue Apr 07 2015 Robert Scheck <robert@fedoraproject.org> 7.1.12-1
- Upgrade to 7.1.12
- Added multiple minor enhancement and bugfix patches
- Added patch to fix CVE-2014-0103 for PHP < 5.3 (#1073618)
- Handle "su" option in logrotate >= 3.8.0 to avoid errors
* Sat Oct 25 2014 Kevin Kofler <Kevin@tigcc.ticalc.org> 7.1.11-2
- Rebuild for reference-counting-enabled clucene09