Add resiliency patch to gpgol
authorAndre Heinecke <aheinecke@intevation.de>
Fri, 27 Apr 2018 07:06:48 +0000 (09:06 +0200)
committerAndre Heinecke <aheinecke@intevation.de>
Fri, 27 Apr 2018 07:06:48 +0000 (09:06 +0200)
* Makefile.am (EXTRA_DIST): Update accordingly.
* patches/gpgol-2.1.1/
0001-Disable-OL-2013-2016-resiliency-for-us.patch: New.

Makefile.am
patches/gpgol-2.1.1/0001-Disable-OL-2013-2016-resiliency-for-us.patch [new file with mode: 0755]

index 1431aac..a3cd2b8 100644 (file)
@@ -46,7 +46,8 @@ EXTRA_DIST = autogen.sh README.GIT ONEWS \
         patches/kleopatra/fix-qt5.6-build.patch \
         patches/extra-cmake-modules/0001-Use-BIN_INSTALL_DIR-data-for-DATAROOTDIR-on-Windows.patch \
         patches/gpa-0.9.10/0001-w32-Make-location-of-locale-dir-more-flexible.patch \
-        patches/libgpg-error-1.29/0001-doc-Fix-yat2m-build-for-cross-compilation.patch
+        patches/libgpg-error-1.29/0001-doc-Fix-yat2m-build-for-cross-compilation.patch \
+        patches/gpgol-2.1.1/0001-Disable-OL-2013-2016-resiliency-for-us.patch
 
 
 copy-news:
diff --git a/patches/gpgol-2.1.1/0001-Disable-OL-2013-2016-resiliency-for-us.patch b/patches/gpgol-2.1.1/0001-Disable-OL-2013-2016-resiliency-for-us.patch
new file mode 100755 (executable)
index 0000000..863720a
--- /dev/null
@@ -0,0 +1,119 @@
+#! /bin/sh
+patch -p1 -l -f $* < $0
+exit $?
+
+From 8635193d010812d0bff2ee64e6c8e47f1ef43164 Mon Sep 17 00:00:00 2001
+From: Andre Heinecke <aheinecke@intevation.de>
+Date: Fri, 27 Apr 2018 08:29:13 +0200
+Subject: [PATCH] Disable OL 2013 / 2016 resiliency for us
+
+* src/gpgoladdin.cpp (setupDoNotDisable): New.
+(addGpgOLToReg): New helper.
+
+--
+While this should not be necessrary if we don't crash, well
+in the real world it happens and then users have the problem
+that they have to manually renable GpgOL and report it
+as an issue.
+
+With this GpgOL should no longer be disabled in Outlook
+2013 and 2016. 2010 does not have this auto disable.
+
+GnuPG-Bug-Id: T3938
+---
+ src/gpgoladdin.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 73 insertions(+)
+
+diff --git a/src/gpgoladdin.cpp b/src/gpgoladdin.cpp
+index 6f393ca..6525598 100644
+--- a/src/gpgoladdin.cpp
++++ b/src/gpgoladdin.cpp
+@@ -246,6 +246,77 @@ GpgolAddin::QueryInterface (REFIID riid, LPVOID* ppvObj)
+   return hr;
+ }
+
++static void
++addGpgOLToReg (const std::string &path)
++{
++  HKEY h;
++  int err = RegOpenKeyEx (HKEY_CURRENT_USER, path.c_str(), 0,
++                          KEY_ALL_ACCESS, &h);
++  if (err != ERROR_SUCCESS)
++    {
++      log_debug ("%s:%s: no DoNotDisableAddinList entry '%s' creating it",
++                 SRCNAME, __func__, path.c_str ());
++      err = RegCreateKeyEx (HKEY_CURRENT_USER, path.c_str (), 0, NULL,
++                            REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL,
++                            &h, NULL);
++    }
++  if (err != ERROR_SUCCESS)
++    {
++      log_error ("%s:%s: failed to create key.",
++                 SRCNAME, __func__);
++      return;
++    }
++
++  DWORD type;
++  err = RegQueryValueEx (h, GPGOL_PROGID, NULL, &type, NULL, NULL);
++  if (err == ERROR_SUCCESS)
++    {
++      log_debug ("%s:%s: Found gpgol reg key. Leaving it unchanged.",
++                 SRCNAME, __func__);
++      RegCloseKey (h);
++      return;
++    }
++
++  // No key exists. Create one.
++  DWORD dwTemp = 1;
++  err = RegSetValueEx (h, GPGOL_PROGID, 0, REG_DWORD, (BYTE*)&dwTemp, 4);
++  RegCloseKey (h);
++
++  if (err != ERROR_SUCCESS)
++    {
++      log_error ("%s:%s: failed to set registry value.",
++                 SRCNAME, __func__);
++    }
++  else
++    {
++      log_debug ("%s:%s: added gpgol to %s",
++                 SRCNAME, __func__, path.c_str ());
++    }
++}
++
++/* This is a bit evil as we basically disable outlooks resiliency
++   for us. But users are still able to manually disable the addon
++   or change the donotdisable setting to zero and we won't change
++   it.
++
++   It has been much requested by users that we do this automatically.
++*/
++static void
++setupDoNotDisable ()
++{
++  std::string path = "Software\\Microsoft\\Office\\";
++  path += std::to_string (g_ol_version_major);
++  path += ".0\\Outlook\\Resiliency\\DoNotDisableAddinList";
++
++  addGpgOLToReg (path);
++
++  path = "Software\\Microsoft\\Office\\";
++  path += std::to_string (g_ol_version_major);
++  path += ".0\\Outlook\\Resiliency\\AddinList";
++
++  addGpgOLToReg (path);
++}
++
+ STDMETHODIMP
+ GpgolAddin::OnConnection (LPDISPATCH Application, ext_ConnectMode ConnectMode,
+                           LPDISPATCH AddInInst, SAFEARRAY ** custom)
+@@ -284,6 +355,8 @@ GpgolAddin::OnConnection (LPDISPATCH Application, ext_ConnectMode ConnectMode,
+     }
+   engine_init ();
+
++  setupDoNotDisable ();
++
+   if (ConnectMode != ext_cm_Startup)
+     {
+       OnStartupComplete (custom);
+--
+2.11.0