소스 검색

Bug fix: Custom command patterns !S/!E do not include fingerprint of TLS certificate

(cherry picked from commit f21e2db167faf0b358fd53c5095b7bc83c6ea6cb)

Source commit: 5dc6f93c8d37c30b6c6e994479f88c860f95fbf8
Martin Prikryl 5 년 전
부모
커밋
467099ed55
3개의 변경된 파일19개의 추가작업 그리고 5개의 파일을 삭제
  1. 15 4
      source/core/FileMasks.cpp
  2. 2 0
      source/core/FileMasks.h
  3. 2 1
      source/forms/CustomScpExplorer.cpp

+ 15 - 4
source/core/FileMasks.cpp

@@ -1118,30 +1118,41 @@ bool __fastcall TInteractiveCustomCommand::PatternReplacement(int Index, const U
 //---------------------------------------------------------------------------
 __fastcall TCustomCommandData::TCustomCommandData()
 {
-  Init(NULL, UnicodeString(), UnicodeString(), UnicodeString());
+  Init(NULL);
 }
 //---------------------------------------------------------------------------
 __fastcall TCustomCommandData::TCustomCommandData(TTerminal * Terminal)
 {
+  // Should use FillSessionDataForCode as in TCustomScpExplorerForm::SessionDataForCode
   Init(Terminal->SessionData, Terminal->UserName, Terminal->Password,
     Terminal->GetSessionInfo().HostKeyFingerprintSHA256);
 }
 //---------------------------------------------------------------------------
+__fastcall TCustomCommandData::TCustomCommandData(TSessionData * SessionData)
+{
+  Init(SessionData);
+}
+//---------------------------------------------------------------------------
 __fastcall TCustomCommandData::TCustomCommandData(
   TSessionData * SessionData, const UnicodeString & UserName, const UnicodeString & Password)
 {
   Init(SessionData, UserName, Password, UnicodeString());
 }
 //---------------------------------------------------------------------------
-void __fastcall TCustomCommandData::Init(
-  TSessionData * ASessionData, const UnicodeString & AUserName,
-  const UnicodeString & APassword, const UnicodeString & AHostKey)
+void __fastcall TCustomCommandData::Init(TSessionData * ASessionData)
 {
   FSessionData.reset(new TSessionData(L""));
   if (ASessionData != NULL)
   {
     FSessionData->Assign(ASessionData);
   }
+}
+//---------------------------------------------------------------------------
+void __fastcall TCustomCommandData::Init(
+  TSessionData * ASessionData, const UnicodeString & AUserName,
+  const UnicodeString & APassword, const UnicodeString & AHostKey)
+{
+  Init(ASessionData);
   FSessionData->UserName = AUserName;
   FSessionData->Password = APassword;
   FSessionData->HostKey = AHostKey;

+ 2 - 0
source/core/FileMasks.h

@@ -192,6 +192,7 @@ struct TCustomCommandData
 {
   __fastcall TCustomCommandData();
   __fastcall TCustomCommandData(TTerminal * Terminal);
+  __fastcall TCustomCommandData(TSessionData * SessionData);
   __fastcall TCustomCommandData(
     TSessionData * SessionData, const UnicodeString & AUserName,
     const UnicodeString & Password);
@@ -202,6 +203,7 @@ struct TCustomCommandData
 
 private:
   std::unique_ptr<TSessionData> FSessionData;
+  void __fastcall Init(TSessionData * ASessionData);
   void __fastcall Init(
     TSessionData * SessionData, const UnicodeString & AUserName,
     const UnicodeString & Password, const UnicodeString & HostKey);

+ 2 - 1
source/forms/CustomScpExplorer.cpp

@@ -2402,7 +2402,8 @@ void __fastcall TCustomScpExplorerForm::CustomCommand(TStrings * FileList,
   UnicodeString RemotePath;
   if (HasActiveTerminal())
   {
-    Data = TCustomCommandData(Terminal);
+    std::unique_ptr<TSessionData> SessionData(SessionDataForCode());
+    Data = TCustomCommandData(SessionData.get());
     Site = Terminal->SessionData->SessionKey;
     RemotePath = Terminal->CurrentDirectory;
   }