diff --git a/zarafa-7.1.14-spooler-expand_groups.patch b/zarafa-7.1.14-spooler-expand_groups.patch new file mode 100644 index 0000000..f322ba8 --- /dev/null +++ b/zarafa-7.1.14-spooler-expand_groups.patch @@ -0,0 +1,147 @@ +Backport of upstream patch from subversion revision 50583 to fix https://jira.zarafa.com/browse/ZCP-12148 + +--- zarafa-7.1.14/inetmapi/ECVMIMEUtils.cpp 2015-10-20 11:13:43.000000000 +0200 ++++ zarafa-7.1.14/inetmapi/ECVMIMEUtils.cpp.spooler-expand_groups 2016-11-28 22:46:59.000000000 +0100 +@@ -112,7 +112,7 @@ + * This function takes a MAPI table, reads all items from it, expands any groups and adds all expanded recipients into the passed + * recipient table. Group expansion is recursive. + */ +-HRESULT ECVMIMESender::HrAddRecipsFromTable(LPADRBOOK lpAdrBook, IMAPITable *lpTable, vmime::mailboxList &recipients, std::set &setGroups, std::set &setRecips, bool bAllowEveryone) ++HRESULT ECVMIMESender::HrAddRecipsFromTable(LPADRBOOK lpAdrBook, IMAPITable *lpTable, vmime::mailboxList &recipients, std::set &setGroups, std::set &setRecips, bool bAllowEveryone, bool bAlwaysExpandDistrList) + { + HRESULT hr = hrSuccess; + LPSRowSet lpRowSet = NULL; +@@ -125,14 +125,10 @@ + // Get all recipients from the group + for (ULONG i = 0; i < lpRowSet->cRows; i++) { + LPSPropValue lpPropObjectType = PpropFindProp( lpRowSet->aRow[i].lpProps, lpRowSet->aRow[i].cValues, PR_OBJECT_TYPE); ++ bool bAddrFetchSuccess = HrGetAddress(lpAdrBook, lpRowSet->aRow[i].lpProps, lpRowSet->aRow[i].cValues, PR_ENTRYID, PR_DISPLAY_NAME_W, PR_ADDRTYPE_W, PR_EMAIL_ADDRESS_W, strName, strType, strEmail) == hrSuccess; + +- if(lpPropObjectType == NULL || lpPropObjectType->Value.ul == MAPI_MAILUSER) { +- // Normal recipient +- if (HrGetAddress(lpAdrBook, lpRowSet->aRow[i].lpProps, lpRowSet->aRow[i].cValues, +- PR_ENTRYID, PR_DISPLAY_NAME_W, PR_ADDRTYPE_W, PR_EMAIL_ADDRESS_W, +- strName, strType, strEmail) == hrSuccess) +- { +- ++ if (bAddrFetchSuccess && (lpPropObjectType == NULL || lpPropObjectType->Value.ul == MAPI_MAILUSER || (lpPropObjectType->Value.ul == MAPI_DISTLIST && !bAlwaysExpandDistrList))) { ++ if (bAddrFetchSuccess) { + if(!strEmail.empty() && setRecips.find(strEmail) == setRecips.end()) { + recipients.appendMailbox(vmime::create(convert_to(strEmail))); + setRecips.insert(strEmail); +@@ -263,7 +259,7 @@ + if(hr != hrSuccess) + goto exit; + +- hr = HrAddRecipsFromTable(lpAdrBook, lpTable, recipients, setGroups, setRecips, bAllowEveryone); ++ hr = HrAddRecipsFromTable(lpAdrBook, lpTable, recipients, setGroups, setRecips, bAllowEveryone, true); + if(hr != hrSuccess) + goto exit; + +@@ -283,7 +279,7 @@ + return hr; + } + +-HRESULT ECVMIMESender::HrMakeRecipientsList(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, vmime::mailboxList &recipients, bool bAllowEveryone) ++HRESULT ECVMIMESender::HrMakeRecipientsList(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, vmime::mailboxList &recipients, bool bAllowEveryone, bool bAlwaysExpandDistrList) + { + HRESULT hr = hrSuccess; + SRestriction sRestriction; +@@ -320,7 +316,7 @@ + goto exit; + } + +- hr = HrAddRecipsFromTable(lpAdrBook, lpRTable, recipients, setGroups, setRecips, bAllowEveryone); ++ hr = HrAddRecipsFromTable(lpAdrBook, lpRTable, recipients, setGroups, setRecips, bAllowEveryone, true); + if (hr != hrSuccess) + goto exit; + +@@ -338,7 +334,7 @@ + // This function does not catch the vmime exception + // it should be handled by the calling party. + +-HRESULT ECVMIMESender::sendMail(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, bool bAllowEveryone) ++HRESULT ECVMIMESender::sendMail(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, bool bAllowEveryone, bool bAlwaysExpandDistrList) + { + HRESULT hr = hrSuccess; + vmime::mailbox expeditor; +@@ -386,7 +382,7 @@ + goto exit; + } + +- hr = HrMakeRecipientsList(lpAdrBook, lpMessage, vmMessage, recipients, bAllowEveryone); ++ hr = HrMakeRecipientsList(lpAdrBook, lpMessage, vmMessage, recipients, bAllowEveryone, bAlwaysExpandDistrList); + if (hr != hrSuccess) + goto exit; + +--- zarafa-7.1.14/inetmapi/ECVMIMEUtils.h 2015-10-20 11:13:43.000000000 +0200 ++++ zarafa-7.1.14/inetmapi/ECVMIMEUtils.h.spooler-expand_groups 2016-11-28 22:51:24.000000000 +0100 +@@ -55,15 +55,15 @@ + { + private: + +- HRESULT HrMakeRecipientsList(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, vmime::mailboxList &recipients, bool bAllowEveryone); ++ HRESULT HrMakeRecipientsList(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, vmime::mailboxList &recipients, bool bAllowEveryone, bool bAlwaysExpandDistrList); + HRESULT HrExpandGroup(LPADRBOOK lpAdrBook, LPSPropValue lpGroupName, LPSPropValue lpGroupEntryID, vmime::mailboxList &recipients, std::set &setGroups, std::set &setRecips, bool bAllowEveryone); +- HRESULT HrAddRecipsFromTable(LPADRBOOK lpAdrBook, IMAPITable *lpTable, vmime::mailboxList &recipients, std::set &setGroups, std::set &setRecips, bool bAllowEveryone); ++ HRESULT HrAddRecipsFromTable(LPADRBOOK lpAdrBook, IMAPITable *lpTable, vmime::mailboxList &recipients, std::set &setGroups, std::set &setRecips, bool bAllowEveryone, bool bAlwaysExpandDistrList); + + public: + ECVMIMESender(ECLogger *newlpLogger, std::string strSMTPHost, int port); + virtual ~ECVMIMESender(); + +- HRESULT sendMail(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, bool bAllowEveryone); ++ HRESULT sendMail(LPADRBOOK lpAdrBook, LPMESSAGE lpMessage, vmime::ref vmMessage, bool bAllowEveryone, bool bAlwaysExpandDistrList); + }; + + #endif +--- zarafa-7.1.14/inetmapi/inetmapi.cpp 2015-10-20 11:13:43.000000000 +0200 ++++ zarafa-7.1.14/inetmapi/inetmapi.cpp.spooler-expand_groups 2016-11-28 22:50:04.000000000 +0100 +@@ -331,7 +331,7 @@ + goto exit; + } + +- hr = mailer->sendMail(lpAddrBook, lpMessage, vmMessage, sopt.allow_send_to_everyone); ++ hr = mailer->sendMail(lpAddrBook, lpMessage, vmMessage, sopt.allow_send_to_everyone, sopt.always_expand_distr_list); + + exit: + delete mToVM; +--- zarafa-7.1.14/inetmapi/options.h 2015-10-20 11:13:43.000000000 +0200 ++++ zarafa-7.1.14/inetmapi/options.h.spooler-expand_groups 2016-11-28 22:55:44.000000000 +0100 +@@ -68,6 +68,7 @@ + char *charset_upgrade; + bool allow_send_to_everyone; + bool enable_dsn; /**< Enable SMTP Delivery Status Notifications */ ++ bool always_expand_distr_list; + } sending_options; + + void INETMAPI_API imopt_default_delivery_options(delivery_options *dopt); +--- zarafa-7.1.14/spooler/mailer.cpp 2015-10-20 11:13:43.000000000 +0200 ++++ zarafa-7.1.14/spooler/mailer.cpp.spooler-expand_groups 2016-11-28 22:54:38.000000000 +0100 +@@ -2178,6 +2178,8 @@ + // Enable SMTP Delivery Status Notifications + sopt.enable_dsn = parseBool(g_lpConfig->GetSetting("enable_dsn")); + ++ sopt.always_expand_distr_list = parseBool(g_lpConfig->GetSetting("expand_groups")); ++ + // Init plugin system + hr = pyMapiPluginFactory.Init(g_lpConfig, g_lpLogger); + if (hr != hrSuccess) { +@@ -2427,7 +2429,7 @@ + */ + } + +- if(parseBool(g_lpConfig->GetSetting("expand_groups"))) { ++ if (sopt.always_expand_distr_list) { + // Expand recipients with ADDRTYPE=ZARAFA to multiple ADDRTYPE=SMTP recipients + hr = ExpandRecipients(lpAddrBook, lpMessage); + if(hr != hrSuccess) +@@ -2438,7 +2440,7 @@ + if (hr != hrSuccess) + g_lpLogger->Log(EC_LOGLEVEL_WARNING, "Unable to rewrite recipients"); + +- if(parseBool(g_lpConfig->GetSetting("expand_groups"))) { ++ if (sopt.always_expand_distr_list) { + // Only touch recips if we're expanding groups; the rationale is here that the user + // has typed a recipient twice if we have duplicates and expand_groups = no, so that's + // what the user wanted apparently. What's more, duplicate recips are filtered for RCPT TO diff --git a/zarafa.spec b/zarafa.spec index a0918f4..067aed8 100644 --- a/zarafa.spec +++ b/zarafa.spec @@ -1,5 +1,5 @@ %global beta_or_rc 0 -%global actual_release 1 +%global actual_release 3 %global svnrevision 51822 %global with_search 1 %global with_ldap 1 @@ -72,6 +72,7 @@ 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 +Patch19: zarafa-7.1.14-spooler-expand_groups.patch BuildRequires: bison BuildRequires: gcc-c++ @@ -419,6 +420,7 @@ touch -c -r autoconf/boost.m4.gcc5 autoconf/boost.m4 %patch17 -p1 -b .webaccess-defaultfont rm -f php-webclient-ajax/{.,*,*/*,*/*/*/*}/*.webaccess-* %patch18 -p1 -b .ssl_dhe +%patch19 -p1 -b .spooler-expand_groups %build %if 0%{?rhel}%{?fedora} < 6 @@ -962,6 +964,12 @@ fi %{python_sitearch}/* %changelog +* Mon Nov 28 2016 Robert Scheck 7.1.14-3 +- Added upstream patch to fix broken group expansion (ZCP-12148) + +* Wed Dec 23 2015 Robert Scheck 7.1.14-2 +- Rebuild for libical soname bump (#1288284) + * Tue Nov 10 2015 Robert Scheck 7.1.14-1 - Upgrade to 7.1.14 (#1263006)