Răsfoiți Sursa

Bug 1688: Use remembered private key passphrase in generated script/code

https://winscp.net/tracker/1688

Source commit: 12f3b1fecf9582f57f11f3f88c0d376c76bb530c
Martin Prikryl 7 ani în urmă
părinte
comite
57b441bcb3

+ 11 - 0
source/core/Terminal.cpp

@@ -953,6 +953,7 @@ __fastcall TTerminal::TTerminal(TSessionData * SessionData,
   FTunnelOpening = false;
   FCallbackGuard = NULL;
   FNesting = 0;
+  FRememberedPasswordKind = TPromptKind(-1);
 }
 //---------------------------------------------------------------------------
 __fastcall TTerminal::~TTerminal()
@@ -4778,6 +4779,16 @@ void __fastcall TTerminal::FillSessionDataForCode(TSessionData * Data)
   }
 }
 //---------------------------------------------------------------------------
+void __fastcall TTerminal::UpdateSessionCredentials(TSessionData * Data)
+{
+  Data->UserName = UserName;
+  Data->Password = Password;
+  if (!FRememberedPassword.IsEmpty() && (FRememberedPasswordKind == pkPassphrase))
+  {
+    Data->Passphrase = GetRememberedPassword();
+  }
+}
+//---------------------------------------------------------------------------
 TTerminal * __fastcall TTerminal::GetCommandSession()
 {
   if ((FCommandSession != NULL) && !FCommandSession->Active)

+ 1 - 0
source/core/Terminal.h

@@ -601,6 +601,7 @@ public:
   void __fastcall CollectUsage();
   TTerminal * __fastcall CreateSecondarySession(const UnicodeString & Name, TSessionData * SessionData);
   void __fastcall FillSessionDataForCode(TSessionData * Data);
+  void __fastcall UpdateSessionCredentials(TSessionData * Data);
 
   const TSessionInfo & __fastcall GetSessionInfo();
   const TFileSystemInfo & __fastcall GetFileSystemInfo(bool Retrieve = false);

+ 1 - 1
source/forms/CustomScpExplorer.cpp

@@ -5742,7 +5742,7 @@ TSessionData * __fastcall TCustomScpExplorerForm::CloneCurrentSessionData()
   std::unique_ptr<TSessionData> SessionData(new TSessionData(L""));
   SessionData->Assign(Terminal->SessionData);
   UpdateSessionData(SessionData.get());
-  TTerminalManager::Instance()->UpdateSessionCredentials(SessionData.get());
+  Terminal->UpdateSessionCredentials(SessionData.get());
   if (!Terminal->SessionData->HasSessionName())
   {
     // Particularly for "Workspace/XXXX" name, we need to reset it, as it would become user-visible

+ 1 - 7
source/windows/TerminalManager.cpp

@@ -1381,12 +1381,6 @@ bool __fastcall TTerminalManager::CanOpenInPutty()
   return (ActiveTerminal != NULL) && !GUIConfiguration->PuttyPath.Trim().IsEmpty();
 }
 //---------------------------------------------------------------------------
-void __fastcall TTerminalManager::UpdateSessionCredentials(TSessionData * Data)
-{
-  Data->UserName = ActiveTerminal->UserName;
-  Data->Password = ActiveTerminal->Password;
-}
-//---------------------------------------------------------------------------
 void __fastcall TTerminalManager::OpenInPutty()
 {
   Configuration->Usage->Inc(L"OpenInPutty");
@@ -1405,7 +1399,7 @@ void __fastcall TTerminalManager::OpenInPutty()
       Data = new TSessionData(L"");
       DebugAssert(ActiveTerminal != NULL);
       Data->Assign(ActiveTerminal->SessionData);
-      UpdateSessionCredentials(Data);
+      ActiveTerminal->UpdateSessionCredentials(Data);
     }
 
     // putty does not support resolving environment variables in session settings

+ 0 - 1
source/windows/TerminalManager.h

@@ -63,7 +63,6 @@ public:
   void __fastcall QueueStatusUpdated();
   TTerminal * __fastcall FindActiveTerminalForSite(TSessionData * Data);
   TTerminalQueue * __fastcall FindQueueForTerminal(TTerminal * Terminal);
-  void __fastcall UpdateSessionCredentials(TSessionData * Data);
   bool __fastcall UploadPublicKey(TTerminal * Terminal, TSessionData * Data, UnicodeString & FileName);
 
   __property TCustomScpExplorerForm * ScpExplorer = { read = FScpExplorer, write = SetScpExplorer };