浏览代码

Bug 1687: Remembered passphrase is used as a password in generated script/code

https://winscp.net/tracker/1687
(cherry picked from commit 52791af23d2a6d1b9e67bcfea41ee6c0137cc06e)

Source commit: f7830e9ba6a31c835ea6007410c9701b13a9e93e
Martin Prikryl 7 年之前
父节点
当前提交
1484a7ec5d
共有 2 个文件被更改,包括 4 次插入1 次删除
  1. 3 1
      source/core/Terminal.cpp
  2. 1 0
      source/core/Terminal.h

+ 3 - 1
source/core/Terminal.cpp

@@ -1429,6 +1429,7 @@ void __fastcall TTerminal::Open()
         // Particularly to prevent reusing a wrong client certificate passphrase
         // Particularly to prevent reusing a wrong client certificate passphrase
         // in the next login attempt
         // in the next login attempt
         FRememberedPassword = UnicodeString();
         FRememberedPassword = UnicodeString();
+        FRememberedPasswordKind = TPromptKind(-1);
         FRememberedTunnelPassword = UnicodeString();
         FRememberedTunnelPassword = UnicodeString();
         throw;
         throw;
       }
       }
@@ -1788,6 +1789,7 @@ bool __fastcall TTerminal::DoPromptUser(TSessionData * /*Data*/, TPromptKind Kin
       else
       else
       {
       {
         GetPasswordSource()->FRememberedPassword = EncryptedPassword;
         GetPasswordSource()->FRememberedPassword = EncryptedPassword;
+        GetPasswordSource()->FRememberedPasswordKind = Kind;
       }
       }
     }
     }
   }
   }
@@ -6318,7 +6320,7 @@ UnicodeString __fastcall TTerminal::GetPassword()
   {
   {
     Result = SessionData->Password;
     Result = SessionData->Password;
   }
   }
-  else
+  else if (FRememberedPasswordKind != pkPassphrase)
   {
   {
     Result = RememberedPassword;
     Result = RememberedPassword;
   }
   }

+ 1 - 0
source/core/Terminal.h

@@ -188,6 +188,7 @@ private:
   TSessionStatus FStatus;
   TSessionStatus FStatus;
   int FOpening;
   int FOpening;
   RawByteString FRememberedPassword;
   RawByteString FRememberedPassword;
+  TPromptKind FRememberedPasswordKind;
   RawByteString FRememberedTunnelPassword;
   RawByteString FRememberedTunnelPassword;
   TTunnelThread * FTunnelThread;
   TTunnelThread * FTunnelThread;
   TSecureShell * FTunnel;
   TSecureShell * FTunnel;