Browse Source

Bug fix: Some cached SSH and TLS/SSL fingerprints were not preserved when exporting/importing the configuration

Source commit: 2c66e7c37b9b748ffba2e24eefecf4ecad85ff9f
Martin Prikryl 6 years ago
parent
commit
f1ae6b1eb6
3 changed files with 10 additions and 5 deletions
  1. 7 2
      source/core/Configuration.cpp
  2. 1 0
      source/core/Configuration.h
  3. 2 3
      source/core/FtpFileSystem.cpp

+ 7 - 2
source/core/Configuration.cpp

@@ -35,7 +35,9 @@ const UnicodeString Crc32ChecksumAlg(L"crc32");
 const UnicodeString SshFingerprintType(L"ssh");
 const UnicodeString TlsFingerprintType(L"tls");
 //---------------------------------------------------------------------------
+const UnicodeString FtpsCertificateStorageKey(L"FtpsCertificates");
 const UnicodeString HttpsCertificateStorageKey(L"HttpsCertificates");
+const UnicodeString LastFingerprintsStorageKey(L"LastFingerprints");
 //---------------------------------------------------------------------------
 __fastcall TConfiguration::TConfiguration()
 {
@@ -522,12 +524,15 @@ void __fastcall TConfiguration::CopyData(THierarchicalStorage * Source,
     }
 
     CopyAllStringsInSubKey(Source, Target, L"Banners");
+    CopyAllStringsInSubKey(Source, Target, LastFingerprintsStorageKey);
 
     Target->CloseSubKey();
     Source->CloseSubKey();
   }
 
   CopyAllStringsInSubKey(Source, Target, SshHostKeysSubKey);
+  CopyAllStringsInSubKey(Source, Target, FtpsCertificateStorageKey);
+  CopyAllStringsInSubKey(Source, Target, HttpsCertificateStorageKey);
 }
 //---------------------------------------------------------------------------
 void __fastcall TConfiguration::LoadDirectoryChangesCache(const UnicodeString SessionKey,
@@ -647,7 +652,7 @@ void __fastcall TConfiguration::RememberLastFingerprint(const UnicodeString & Si
   Storage->AccessMode = smReadWrite;
 
   if (Storage->OpenSubKey(ConfigurationSubKey, true) &&
-      Storage->OpenSubKey(L"LastFingerprints", true))
+      Storage->OpenSubKey(LastFingerprintsStorageKey, true))
   {
     UnicodeString FingerprintKey = FormatFingerprintKey(SiteKey, FingerprintType);
     Storage->WriteString(FingerprintKey, Fingerprint);
@@ -662,7 +667,7 @@ UnicodeString __fastcall TConfiguration::LastFingerprint(const UnicodeString & S
   Storage->AccessMode = smRead;
 
   if (Storage->OpenSubKey(ConfigurationSubKey, false) &&
-      Storage->OpenSubKey(L"LastFingerprints", false))
+      Storage->OpenSubKey(LastFingerprintsStorageKey, false))
   {
     UnicodeString FingerprintKey = FormatFingerprintKey(SiteKey, FingerprintType);
     Result = Storage->ReadString(FingerprintKey, L"");

+ 1 - 0
source/core/Configuration.h

@@ -353,6 +353,7 @@ extern const UnicodeString Crc32ChecksumAlg;
 extern const UnicodeString SshFingerprintType;
 extern const UnicodeString TlsFingerprintType;
 //---------------------------------------------------------------------------
+extern const UnicodeString FtpsCertificateStorageKey;
 extern const UnicodeString HttpsCertificateStorageKey;
 //---------------------------------------------------------------------------
 #endif

+ 2 - 3
source/core/FtpFileSystem.cpp

@@ -186,7 +186,6 @@ struct TFileTransferData
   TDateTime Modification;
 };
 //---------------------------------------------------------------------------
-const UnicodeString CertificateStorageKey(L"FtpsCertificates");
 const UnicodeString SiteCommand(L"SITE");
 const UnicodeString SymlinkSiteCommand(L"SYMLINK");
 const UnicodeString CopySiteCommand(L"COPY");
@@ -3944,7 +3943,7 @@ bool __fastcall TFTPFileSystem::HandleAsynchRequestVerifyCertificate(
 
       if (!VerificationResult)
       {
-        if (FTerminal->VerifyCertificate(CertificateStorageKey, FTerminal->SessionData->SiteKey,
+        if (FTerminal->VerifyCertificate(FtpsCertificateStorageKey, FTerminal->SessionData->SiteKey,
               FSessionInfo.CertificateFingerprint, CertificateSubject, Data.VerificationResult))
         {
           // certificate is trusted, but for not purposes of info dialog
@@ -4009,7 +4008,7 @@ bool __fastcall TFTPFileSystem::HandleAsynchRequestVerifyCertificate(
 
       if (RequestResult == 0)
       {
-        if (FTerminal->ConfirmCertificate(FSessionInfo, Data.VerificationResult, CertificateStorageKey, true))
+        if (FTerminal->ConfirmCertificate(FSessionInfo, Data.VerificationResult, FtpsCertificateStorageKey, true))
         {
           // FZ's VerifyCertDlg.cpp returns 2 for "cached", what we do nto distinguish here,
           // however FZAPI takes all non-zero values equally.