浏览代码

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

Source commit: 8d2e9cf9712dc3d1215e64c5f14c14304f877293
Martin Prikryl 5 年之前
父节点
当前提交
f21e2db167
共有 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

@@ -2425,7 +2425,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;
   }