From 33d5110297984a718862446819775f46667a96fd Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 10 May 2019 17:34:57 +0200 Subject: [PATCH 01/15] Initial commit --- build-windows/pEpEngine.vcxproj | 162 +++++++++++++++++++++--- build-windows/pEpEngine.vcxproj.filters | 48 ++++--- build-windows/packages.config | 4 + src/pgp_sequoia.c | 16 ++- 4 files changed, 188 insertions(+), 42 deletions(-) create mode 100644 build-windows/packages.config diff --git a/build-windows/pEpEngine.vcxproj b/build-windows/pEpEngine.vcxproj index b400d15c..fb952a5b 100644 --- a/build-windows/pEpEngine.vcxproj +++ b/build-windows/pEpEngine.vcxproj @@ -5,10 +5,18 @@ Debug Win32 + + Debug + x64 + Release Win32 + + Release + x64 + {146E69F8-E1DA-456A-B048-6DD29D9ACF6B} @@ -23,6 +31,12 @@ v141 Unicode + + DynamicLibrary + true + v141 + Unicode + DynamicLibrary false @@ -30,56 +44,127 @@ true Unicode + + DynamicLibrary + false + v141 + true + Unicode + + + + + + + true false - $(ProjectDir)\..\..\libetpan\build-windows\include;C:\Program Files %28x86%29\GnuPG\include;$(IncludePath);$(ProjectDir)\asn.1;%ASN1C%\share\asn1c - $(ProjectDir)\..\..\libetpan\build-windows\Debug;$(LibraryPath) + $(IncludePath) + $(LibraryPath) true true true C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset + + + + + true + false + $(IncludePath) + $(LibraryPath) + true + true + true + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset + + false - $(ProjectDir)\..\..\libetpan\build-windows\include;C:\Program Files %28x86%29\GnuPG\include;$(IncludePath);$(ProjectDir)\asn.1;%ASN1C%\share\asn1c - $(ProjectDir)\..\..\libetpan\build-windows\Release;$(LibraryPath) + $(IncludePath) + $(LibraryPath) true true true C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset false + + + + + false + $(IncludePath) + $(LibraryPath) + true + true + true + C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset + false + + NotUsing Level3 Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) + WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;USE_SEQUOIA;%(PreprocessorDefinitions) true false - $(SolutionDir)Tools\asn1c\share\asn1c;%(AdditionalIncludeDirectories) + $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default + 4703 Windows true - Rpcrt4.lib;%(AdditionalDependencies) + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;Rpcrt4.lib;%(AdditionalDependencies) NotSet + $(SolutionDir)sequoia\target\debug;$(SolutionDir)Dependencies\sequoia\lib + false + false - - + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" -p sequoia-openpgp-ffi + + + + + + + NotUsing + Level3 + Disabled + WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;USE_SEQUOIA;%(PreprocessorDefinitions) + true + false + $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)libetpan\build-windows\include;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) + Default + 4703 + + + Windows + true + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) + NotSet + $(SolutionDir)sequoia\target\debug;$(SolutionDir)Dependencies\sequoia\lib + false + false + + + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" -p sequoia-openpgp-ffi @@ -91,25 +176,57 @@ MaxSpeed true true - WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;%(PreprocessorDefinitions) + WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;USE_SEQUOIA;%(PreprocessorDefinitions) + false + false + $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) + Default + true + Guard + false + 4703 + + + Windows + true + true + true + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;Rpcrt4.lib;%(AdditionalDependencies) + $(SolutionDir)sequoia\target\release;$(SolutionDir)Dependencies\sequoia\lib + + + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" --release -p sequoia-openpgp-ffi + + + + + + + Level3 + NotUsing + MaxSpeed + true + true + WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;USE_SEQUOIA;%(PreprocessorDefinitions) false false - $(SolutionDir)Tools\asn1c\share\asn1c;%(AdditionalIncludeDirectories) + $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)libetpan\build-windows\include;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default true Guard false + 4703 Windows true true true - Rpcrt4.lib;%(AdditionalDependencies) + sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) + $(SolutionDir)sequoia\target\release;$(SolutionDir)Dependencies\sequoia\lib - - + cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" --release -p sequoia-openpgp-ffi @@ -135,7 +252,7 @@ - + @@ -161,6 +278,7 @@ + @@ -175,8 +293,8 @@ - - + + @@ -205,7 +323,17 @@ {9a67164d-b8f8-4601-a24b-28afe774d41c} + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/build-windows/pEpEngine.vcxproj.filters b/build-windows/pEpEngine.vcxproj.filters index 17b73531..a7947ba9 100644 --- a/build-windows/pEpEngine.vcxproj.filters +++ b/build-windows/pEpEngine.vcxproj.filters @@ -33,9 +33,6 @@ Quelldateien - - Quelldateien - Quelldateien @@ -54,9 +51,6 @@ Quelldateien - - Quelldateien - Quelldateien @@ -120,6 +114,12 @@ Quelldateien + + Quelldateien + + + Quelldateien + @@ -140,15 +140,9 @@ Headerdateien - - Headerdateien - Headerdateien - - Headerdateien - Ressourcendateien @@ -176,9 +170,6 @@ Headerdateien - - Headerdateien - Headerdateien @@ -236,12 +227,6 @@ Headerdateien - - Headerdateien - - - Headerdateien - Headerdateien @@ -257,8 +242,29 @@ Quelldateien + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + Headerdateien + + + + \ No newline at end of file diff --git a/build-windows/packages.config b/build-windows/packages.config new file mode 100644 index 00000000..a37b0a25 --- /dev/null +++ b/build-windows/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index cd4765d8..00b4cf23 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -7,7 +7,7 @@ #include "platform.h" #include "pEp_internal.h" -#include "pgp_gpg.h" +#include "pgp_sequoia.h" #include #include @@ -124,18 +124,26 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) PEP_STATUS status = PEP_STATUS_OK; // Create the home directory. - char *home_env = getenv("HOME"); +#ifdef _WIN32 + char *home_env = getenv("LOCALAPPDATA"); +#else + char *home_env = getenv("HOME"); +#endif if (!home_env) ERROR_OUT(NULL, PEP_INIT_GPGME_INIT_FAILED, "HOME unset"); // Create the DB and initialize it. - size_t path_size = strlen(home_env)+13+1; + size_t path_size = strlen(home_env)+18; char *path = (char *) calloc(1, path_size); assert(path); if (!path) ERROR_OUT(NULL, PEP_OUT_OF_MEMORY, "out of memory"); - int r = snprintf(path, path_size, "%s/.pEp_keys.db", home_env); +#ifdef _WIN32 + int r = snprintf(path, path_size, "%s\\pEp\\.pEp_keys.db", home_env); +#else + int r = snprintf(path, path_size, "%s/.pEp_keys.db", home_env); +#endif assert(r >= 0 && r < path_size); if (r < 0) ERROR_OUT(NULL, PEP_UNKNOWN_ERROR, "snprintf"); From 7855d4dc913e4a12d93db1f06d58612487e4a61c Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 10 May 2019 17:37:37 +0200 Subject: [PATCH 02/15] Adjust libpEpasn1 for Sequoia build --- build-windows/libpEpasn1/libpEpasn1.vcxproj | 9 +- .../libpEpasn1/libpEpasn1.vcxproj.filters | 859 +++++++++++++++--- 2 files changed, 755 insertions(+), 113 deletions(-) diff --git a/build-windows/libpEpasn1/libpEpasn1.vcxproj b/build-windows/libpEpasn1/libpEpasn1.vcxproj index 8a8c7ac0..9531d189 100644 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj @@ -70,7 +70,7 @@ - $(ProjectDir)..\..\asn.1;$(IncludePath) + $(IncludePath) $(ProjectDir)..\..\asn.1;$(IncludePath) @@ -82,6 +82,7 @@ Level3 Disabled WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -98,6 +99,7 @@ Level3 Disabled _DEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -112,6 +114,7 @@ true true WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -132,6 +135,7 @@ true true NDEBUG;_LIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\asn.1 Windows @@ -149,6 +153,5 @@ - - + \ No newline at end of file diff --git a/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters b/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters index fdebf3b3..19b1114a 100644 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj.filters @@ -18,336 +18,975 @@ - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files - + Source Files From b7eb95973b92f6c5a7171953b6a6493e1f48a997 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 May 2019 11:50:39 +0200 Subject: [PATCH 03/15] Adjust include directories --- build-windows/pEpEngine.vcxproj | 116 ++------------------------------ 1 file changed, 5 insertions(+), 111 deletions(-) diff --git a/build-windows/pEpEngine.vcxproj b/build-windows/pEpEngine.vcxproj index fb952a5b..12ac6842 100644 --- a/build-windows/pEpEngine.vcxproj +++ b/build-windows/pEpEngine.vcxproj @@ -5,18 +5,10 @@ Debug Win32 - - Debug - x64 - Release Win32 - - Release - x64 - {146E69F8-E1DA-456A-B048-6DD29D9ACF6B} @@ -31,12 +23,6 @@ v141 Unicode - - DynamicLibrary - true - v141 - Unicode - DynamicLibrary false @@ -44,28 +30,15 @@ true Unicode - - DynamicLibrary - false - v141 - true - Unicode - - - - - - - true @@ -79,18 +52,6 @@ - - true - false - $(IncludePath) - $(LibraryPath) - true - true - true - C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset - - - false $(IncludePath) @@ -103,18 +64,6 @@ - - false - $(IncludePath) - $(LibraryPath) - true - true - true - C:\Program Files (x86)\Microsoft Visual Studio 14.0\Team Tools\Static Analysis Tools\Rule Sets\NativeRecommendedRules.ruleset - false - - - NotUsing @@ -123,34 +72,7 @@ WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;USE_SEQUOIA;%(PreprocessorDefinitions) true false - $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) - Default - 4703 - - - Windows - true - sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;Rpcrt4.lib;%(AdditionalDependencies) - NotSet - $(SolutionDir)sequoia\target\debug;$(SolutionDir)Dependencies\sequoia\lib - false - false - - - cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" -p sequoia-openpgp-ffi - - - - - - - NotUsing - Level3 - Disabled - WIN32;_DEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;_CRT_SECURE_NO_WARNINGS;USE_SEQUOIA;%(PreprocessorDefinitions) - true - false - $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)libetpan\build-windows\include;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) + $(SolutionDir)libetpan\build-windows\include;$(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default 4703 @@ -179,38 +101,7 @@ WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;USE_SEQUOIA;%(PreprocessorDefinitions) false false - $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) - Default - true - Guard - false - 4703 - - - Windows - true - true - true - sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;Rpcrt4.lib;%(AdditionalDependencies) - $(SolutionDir)sequoia\target\release;$(SolutionDir)Dependencies\sequoia\lib - - - cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" --release -p sequoia-openpgp-ffi - - - - - - - Level3 - NotUsing - MaxSpeed - true - true - WIN32;NDEBUG;_WINDOWS;_USRDLL;PEPENGINE_EXPORTS;USE_SEQUOIA;%(PreprocessorDefinitions) - false - false - $(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)libetpan\build-windows\include;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) + $(SolutionDir)libetpan\build-windows\include;$(SolutionDir)Tools\asn1c\share\asn1c;$(SolutionDir)sequoia\openpgp-ffi\include;%(AdditionalIncludeDirectories) Default true Guard @@ -230,6 +121,9 @@ + + xcopy $(SolutionDir)sequoia\target\release\sequoia_openpgp_ffi.lib $(TargetDir) /Y + From 467c6c58221870c1f8881cd55572c2f79fb5b653 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 May 2019 11:53:00 +0200 Subject: [PATCH 04/15] Remove 64bit configuration --- build-windows/libpEpasn1/libpEpasn1.vcxproj | 57 --------------------- 1 file changed, 57 deletions(-) diff --git a/build-windows/libpEpasn1/libpEpasn1.vcxproj b/build-windows/libpEpasn1/libpEpasn1.vcxproj index 9531d189..4b40f2ea 100644 --- a/build-windows/libpEpasn1/libpEpasn1.vcxproj +++ b/build-windows/libpEpasn1/libpEpasn1.vcxproj @@ -9,14 +9,6 @@ Release Win32 - - Debug - x64 - - - Release - x64 - {9A67164D-B8F8-4601-A24B-28AFE774D41C} @@ -38,19 +30,6 @@ true Unicode - - StaticLibrary - true - v141 - Unicode - - - StaticLibrary - false - v141 - true - Unicode - @@ -62,12 +41,6 @@ - - - - - - $(IncludePath) @@ -92,19 +65,6 @@ Generating Code for pEp Sync - - - - - Level3 - Disabled - _DEBUG;_LIB;%(PreprocessorDefinitions) - $(ProjectDir)..\..\asn.1 - - - Windows - - Level3 @@ -126,23 +86,6 @@ Generating Code for pEp Sync - - - Level3 - - - MaxSpeed - true - true - NDEBUG;_LIB;%(PreprocessorDefinitions) - $(ProjectDir)..\..\asn.1 - - - Windows - true - true - - From 6dabe9170193f19b2c3ad1c06820e298d31a0831 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 May 2019 15:44:21 +0200 Subject: [PATCH 05/15] Define Sequoia keyring path for Windows build --- src/pgp_sequoia.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index 7aa5d9cc..cb1216de 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -121,16 +121,17 @@ int email_cmp(void *cookie, int a_len, const void *a, int b_len, const void *b) PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) { - #define PATH "/.pEp_keys.db" - PEP_STATUS status = PEP_STATUS_OK; // Create the home directory. #ifdef _WIN32 + #define PATH "\\pEp\\.pEp_keys.db" char *home_env = getenv("LOCALAPPDATA"); #else + #define PATH "/.pEp_keys.db" char *home_env = getenv("HOME"); #endif + if (!home_env) ERROR_OUT(NULL, PEP_INIT_GPGME_INIT_FAILED, "HOME unset"); From af0b50355107c7367d07c99b8ac819eeb63a61f1 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 13 May 2019 16:43:46 +0200 Subject: [PATCH 06/15] Adjust library paths --- build-windows/pEpEngine.vcxproj | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/build-windows/pEpEngine.vcxproj b/build-windows/pEpEngine.vcxproj index 12ac6842..16a89550 100644 --- a/build-windows/pEpEngine.vcxproj +++ b/build-windows/pEpEngine.vcxproj @@ -81,7 +81,7 @@ true sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) NotSet - $(SolutionDir)sequoia\target\debug;$(SolutionDir)Dependencies\sequoia\lib + $(SolutionDir)sequoia\target\debug;C:\msys64\mingw32\lib false false @@ -90,6 +90,9 @@ + + xcopy "$(SolutionDir)sequoia\target\debug\sequoia_openpgp_ffi.lib" "$(TargetDir)" /Y + @@ -114,7 +117,7 @@ true true sequoia_openpgp_ffi.lib;gmp.lib;nettle.lib;hogweed.lib;ws2_32.lib;userenv.lib;dbghelp.lib;Rpcrt4.lib;%(AdditionalDependencies) - $(SolutionDir)sequoia\target\release;$(SolutionDir)Dependencies\sequoia\lib + $(SolutionDir)sequoia\target\release;C:\msys64\mingw32\lib cargo build --manifest-path="$(SolutionDir)sequoia\Cargo.toml" --release -p sequoia-openpgp-ffi @@ -122,7 +125,7 @@ - xcopy $(SolutionDir)sequoia\target\release\sequoia_openpgp_ffi.lib $(TargetDir) /Y + xcopy "$(SolutionDir)sequoia\target\release\sequoia_openpgp_ffi.lib" "$(TargetDir)" /Y From 5ce2773de0a79a1de9a85082a1e18f5f19324bc0 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 17 May 2019 08:26:12 +0200 Subject: [PATCH 07/15] Save Sequoia key db to %LOCALAPPDATA%\pEp --- src/pgp_sequoia.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index af8434b5..b8693cda 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -188,7 +188,7 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) #define PEP_KEYS_PATH "\\pEp\\keys.db" if (!home_env) - home_env = getenv("APPDATA"); + home_env = getenv("LOCALAPPDATA"); #else #define PEP_KEYS_PATH "/keys.db" From 56f45116054adac5eb45d858fd1e0afcaaf51e60 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 31 May 2019 07:55:22 +0200 Subject: [PATCH 08/15] Fix spacing --- src/pgp_sequoia.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index e5d31251..80a3f2d6 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -185,12 +185,12 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) #endif #ifdef _WIN32 - #define PEP_KEYS_PATH "\\pEp\\keys.db" + #define PEP_KEYS_PATH "\\pEp\\keys.db" if (!home_env) home_env = getenv("LOCALAPPDATA"); #else - #define PEP_KEYS_PATH "/keys.db" + #define PEP_KEYS_PATH "/keys.db" if (!home_env) home_env = getenv("HOME"); From 0ce285e7aabe83a01de538d15f340fd09757987a Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 5 Jun 2019 08:33:33 +0200 Subject: [PATCH 09/15] Set sync timeout to 5 minutes --- sync/sync.fsm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sync/sync.fsm b/sync/sync.fsm index 3b33f521..451c4a43 100644 --- a/sync/sync.fsm +++ b/sync/sync.fsm @@ -10,7 +10,7 @@ include ./fsm.yml2 protocol Sync 1 { // all messages have a timestamp, time out and are removed after timeout - fsm KeySync 1, threshold=60 { + fsm KeySync 1, threshold=300 { version 1, 2; state InitState { From fc0173604d9507d43d5cd5d95986b25c11711c4a Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 14 Jun 2019 14:45:26 +0200 Subject: [PATCH 10/15] ENGINE-579: save management.db and keys.db to different folder if env variable PEP_APPDATA is set --- src/pEp_internal.h | 1 + src/pgp_sequoia.c | 19 ++++++++++++------- src/platform_windows.cpp | 28 ++++++++++++++++++++++++++-- src/platform_windows.h | 1 + 4 files changed, 40 insertions(+), 9 deletions(-) diff --git a/src/pEp_internal.h b/src/pEp_internal.h index 955565c1..4e78fd2d 100644 --- a/src/pEp_internal.h +++ b/src/pEp_internal.h @@ -55,6 +55,7 @@ #include "platform.h" #ifdef WIN32 +#define KEYS_DB windoze_keys_db() #define LOCAL_DB windoze_local_db() #define SYSTEM_DB windoze_system_db() #define LIBGPGME "libgpgme-11.dll" diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index 31ac76a2..6e4f996a 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -182,23 +182,26 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) { PEP_STATUS status = PEP_STATUS_OK; +#ifdef _WIN32 + int sqlite_result; + sqlite_result = sqlite3_open_v2(KEYS_DB, + &session->key_db, + SQLITE_OPEN_READWRITE + | SQLITE_OPEN_CREATE + | SQLITE_OPEN_FULLMUTEX + | SQLITE_OPEN_PRIVATECACHE, + NULL); +#else // Create the home directory. char *home_env = NULL; #ifndef NDEBUG home_env = getenv("PEP_HOME"); #endif -#ifdef _WIN32 - #define PEP_KEYS_PATH "\\pEp\\keys.db" - - if (!home_env) - home_env = getenv("LOCALAPPDATA"); -#else #define PEP_KEYS_PATH "/.pEp_keys.db" if (!home_env) home_env = getenv("HOME"); -#endif if (!home_env) ERROR_OUT(NULL, PEP_INIT_GPGME_INIT_FAILED, "HOME unset"); @@ -224,6 +227,8 @@ PEP_STATUS pgp_init(PEP_SESSION session, bool in_first) | SQLITE_OPEN_PRIVATECACHE, NULL); free(path); +#endif + if (sqlite_result != SQLITE_OK) ERROR_OUT(NULL, PEP_INIT_CANNOT_OPEN_DB, "opening keys DB: %s", sqlite3_errmsg(session->key_db)); diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index 0021bb9f..5ffb6dd1 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -25,6 +25,9 @@ #define WC_ERR_INVALID_CHARS 0x00000080 // error for invalid chars #endif +#define ENV_PEP_APPDATA "PEP_APPDATA" +#define ENV_PEP_APPDATA_VAL "1" + using namespace std; static string utf8_string(wstring wstr) { @@ -193,10 +196,31 @@ void *dlsym(void *handle, const char *symbol) { return (void *) (intptr_t) GetProcAddress((HMODULE) handle, symbol); } +const char *windoze_keys_db(void) { + static string path; + if (path.length() == 0) { + + const char * env = getenv(ENV_PEP_APPDATA); + + if (env && (strcmp(env, ENV_PEP_APPDATA_VAL) == 0)) + path = managementPath("%APPDATA%\\pEp", "keys.db"); + else + path = managementPath("%LOCALAPPDATA%\\pEp", "keys.db"); + } + return path.c_str(); +} + const char *windoze_local_db(void) { static string path; - if (path.length() == 0) - path = managementPath("%LOCALAPPDATA%\\pEp", "management.db"); + if (path.length() == 0) { + + const char * env = getenv(ENV_PEP_APPDATA); + + if (env && (strcmp(env, ENV_PEP_APPDATA_VAL) == 0)) + path = managementPath("%APPDATA%\\pEp", "management.db"); + else + path = managementPath("%LOCALAPPDATA%\\pEp", "management.db"); + } return path.c_str(); } diff --git a/src/platform_windows.h b/src/platform_windows.h index 91a77cb7..e2ce2a87 100644 --- a/src/platform_windows.h +++ b/src/platform_windows.h @@ -75,6 +75,7 @@ char *stpcpy(char *dst, const char *src); size_t strlcpy(char* dst, const char* src, size_t size); size_t strlcat(char* dst, const char* src, size_t size); +const char *windoze_keys_db(void); const char *windoze_local_db(void); const char *windoze_system_db(void); const char *gpg_conf(void); From 29002015504f4eef8f57f2f0b28431d32717eb90 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 17 Jun 2019 11:20:00 +0200 Subject: [PATCH 11/15] ENGINE-579: Read Registry values pEp/UserFolder and pEp/SystemFolder and use the defined paths if available --- src/platform_windows.cpp | 62 ++++++++++++++++++++++++++++------------ 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index 5ffb6dd1..fb3711cf 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -25,8 +25,13 @@ #define WC_ERR_INVALID_CHARS 0x00000080 // error for invalid chars #endif -#define ENV_PEP_APPDATA "PEP_APPDATA" -#define ENV_PEP_APPDATA_VAL "1" +#define SYSTEM_FOLDER_DEFAULT "%ALLUSERSPROFILE%\\pEp" +#define USER_FOLDER_DEFAULT "%LOCALAPPDATA%\\pEp" +#define KEYS_DB "keys.db" +#define MANAGEMENT_DB "management.db" +#define SYSTEM_DB "system.db" +#define USER_FOLDER_PATH pEpUserFolderPath().c_str() +#define SYSTEM_FOLDER_PATH pEpSystemFolderPath().c_str() using namespace std; @@ -135,6 +140,38 @@ static inline string managementPath(const char *file_path, const char *file_name return path; } +static inline string pEpSystemFolderPath(void) +{ + static TCHAR tPath[PATH_BUF_SIZE]; + string path = SYSTEM_FOLDER_DEFAULT; + + // Get SystemFolder Registry value and use if available + bool result = readRegistryString(HKEY_CURRENT_USER, + TEXT("SOFTWARE\\pEp"), TEXT("SystemFolder"), tPath, + PATH_BUF_SIZE, NULL); + + if (result) + path = utf8_string(tPath); + + return path; +} + +static inline string pEpUserFolderPath(void) +{ + static TCHAR tPath[PATH_BUF_SIZE]; + string path = USER_FOLDER_DEFAULT; + + // Get UserFolder Registry value and use if available + bool result = readRegistryString(HKEY_CURRENT_USER, + TEXT("SOFTWARE\\pEp"), TEXT("UserFolder"), tPath, + PATH_BUF_SIZE, NULL); + + if (result) + path = utf8_string(tPath); + + return path; +} + extern "C" { void *dlopen(const char *filename, int flag) { @@ -199,35 +236,22 @@ void *dlsym(void *handle, const char *symbol) { const char *windoze_keys_db(void) { static string path; if (path.length() == 0) { - - const char * env = getenv(ENV_PEP_APPDATA); - - if (env && (strcmp(env, ENV_PEP_APPDATA_VAL) == 0)) - path = managementPath("%APPDATA%\\pEp", "keys.db"); - else - path = managementPath("%LOCALAPPDATA%\\pEp", "keys.db"); + path = managementPath(USER_FOLDER_PATH, KEYS_DB); } return path.c_str(); } const char *windoze_local_db(void) { static string path; - if (path.length() == 0) { - - const char * env = getenv(ENV_PEP_APPDATA); - - if (env && (strcmp(env, ENV_PEP_APPDATA_VAL) == 0)) - path = managementPath("%APPDATA%\\pEp", "management.db"); - else - path = managementPath("%LOCALAPPDATA%\\pEp", "management.db"); - } + if (path.length() == 0) + path = managementPath(USER_FOLDER_PATH, MANAGEMENT_DB); return path.c_str(); } const char *windoze_system_db(void) { static string path; if (path.length() == 0) - path = managementPath("%ALLUSERSPROFILE%\\pEp", "system.db"); + path = managementPath(SYSTEM_FOLDER_PATH, SYSTEM_DB); return path.c_str(); } From 9c222d9d12a0c3e57c5c9dda6492412fcb2873fc Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 17 Jun 2019 13:23:13 +0200 Subject: [PATCH 12/15] Display debug log messages in Visual Studio Output window --- src/pEpEngine.c | 4 ++++ src/platform_windows.cpp | 12 ++++++++++++ src/platform_windows.h | 2 ++ 3 files changed, 18 insertions(+) diff --git a/src/pEpEngine.c b/src/pEpEngine.c index 33dc43f5..805093a7 100644 --- a/src/pEpEngine.c +++ b/src/pEpEngine.c @@ -2024,6 +2024,10 @@ DYNAMIC_API PEP_STATUS log_event( ) { +#if defined(_WIN32) && !defined(NDEBUG) + log_output_debug(title, entity, description, comment); +#endif + // N.B. If testing (so NDEBUG not defined) but this message is spam, // put -D_PEP_SERVICE_LOG_OFF into CFLAGS/CXXFLAGS #if !defined(NDEBUG) && !defined(_PEP_SERVICE_LOG_OFF) diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index fb3711cf..fe34193e 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -372,6 +372,18 @@ void uuid_unparse_upper(pEpUUID uu, uuid_string_t out) } } +void log_output_debug(const char *title, + const char *entity, + const char *description, + const char *comment) +{ + const size_t size = 256; + char str[size]; + + snprintf(str, size, "*** %s %s %s %s\n", title, entity, description, comment); + OutputDebugStringA(str); +} + time_t timegm(struct tm* tm) { return _mkgmtime(tm); } diff --git a/src/platform_windows.h b/src/platform_windows.h index e2ce2a87..d9325601 100644 --- a/src/platform_windows.h +++ b/src/platform_windows.h @@ -81,6 +81,8 @@ const char *windoze_system_db(void); const char *gpg_conf(void); const char *gpg_agent_conf(void); +void log_output_debug(const char *title, const char *entity, const char *description, const char *comment); + long random(void); // on Windoze, uuid_t needs pointer semantics From a5a773e4c9031d97a36725aca183b091b4aff9cd Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 9 Jul 2019 10:53:52 +0200 Subject: [PATCH 13/15] Send Sequoia tracing to Visual Studio debug output --- src/pgp_sequoia.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/pgp_sequoia.c b/src/pgp_sequoia.c index bd5a220f..c13927e1 100644 --- a/src/pgp_sequoia.c +++ b/src/pgp_sequoia.c @@ -34,6 +34,13 @@ __android_log_print(ANDROID_LOG_DEBUG, "pEpEngine-sequoia", \ ##__VA_ARGS__); \ } while (0) +# elif _WIN32 +# define _T(...) do { \ + char str[256]; \ + snprintf(str, 256, ##__VA_ARGS__); \ + OutputDebugStringA(str); \ + } while (0) + # else # define _T(...) do { \ fprintf(stderr, ##__VA_ARGS__); \ From a876f19708af00bc5847e4cad1dd20673a831540 Mon Sep 17 00:00:00 2001 From: Thomas Date: Thu, 8 Aug 2019 11:44:01 +0200 Subject: [PATCH 14/15] Fix Windows build --- src/etpan_mime.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/etpan_mime.h b/src/etpan_mime.h index 2d6a0bc3..d349ae50 100644 --- a/src/etpan_mime.h +++ b/src/etpan_mime.h @@ -3,6 +3,8 @@ #pragma once +#define _EXPORT_PEP_ENGINE_DLL + #include #include #include From ba37576028267f60b51f7ff4abaa9fe86c8e3c78 Mon Sep 17 00:00:00 2001 From: Thomas Date: Fri, 30 Aug 2019 16:49:55 +0200 Subject: [PATCH 15/15] Rename variables --- src/platform_windows.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/platform_windows.cpp b/src/platform_windows.cpp index cc3dcd29..cbbd0304 100644 --- a/src/platform_windows.cpp +++ b/src/platform_windows.cpp @@ -25,13 +25,17 @@ #define WC_ERR_INVALID_CHARS 0x00000080 // error for invalid chars #endif -#define SYSTEM_FOLDER_DEFAULT "%ALLUSERSPROFILE%\\pEp" -#define USER_FOLDER_DEFAULT "%LOCALAPPDATA%\\pEp" +#define PER_MACHINE_DIRECTORY "%ALLUSERSPROFILE%\\pEp" +#define PER_USER_DIRECTORY "%LOCALAPPDATA%\\pEp" #define KEYS_DB "keys.db" #define MANAGEMENT_DB "management.db" #define SYSTEM_DB "system.db" -#define USER_FOLDER_PATH pEpUserFolderPath().c_str() +#ifndef USER_FOLDER_PATH +#define USER_FOLDER_PATH pEpUserFolderPath().c_str() +#endif +#ifndef SYSTEM_FOLDER_PATH #define SYSTEM_FOLDER_PATH pEpSystemFolderPath().c_str() +#endif using namespace std; @@ -143,7 +147,7 @@ static inline string managementPath(const char *file_path, const char *file_name static inline string pEpSystemFolderPath(void) { static TCHAR tPath[PATH_BUF_SIZE]; - string path = SYSTEM_FOLDER_DEFAULT; + string path = PER_MACHINE_DIRECTORY; // Get SystemFolder Registry value and use if available bool result = readRegistryString(HKEY_CURRENT_USER, @@ -159,7 +163,7 @@ static inline string pEpSystemFolderPath(void) static inline string pEpUserFolderPath(void) { static TCHAR tPath[PATH_BUF_SIZE]; - string path = USER_FOLDER_DEFAULT; + string path = PER_USER_DIRECTORY; // Get UserFolder Registry value and use if available bool result = readRegistryString(HKEY_CURRENT_USER,