mirror of
https://github.com/winscp/winscp.git
synced 2026-10-24 02:28:55 +03:00
Bug fix: It was not possible to mass-modify stored sites, when a master password was set (2nd)
Previous implementation broke a prompt for master password, when logging to a site wit encrypted passwords. Source commit: 0cf714c96ffbdcc593c094f7a30a35664e275aff
This commit is contained in:
@@ -448,6 +448,7 @@ void __fastcall TSessionData::Assign(TPersistent * Source)
|
||||
if (Source && Source->InheritsFrom(__classid(TSessionData)))
|
||||
{
|
||||
TSessionData * SourceData = (TSessionData *)Source;
|
||||
// Master password prompt shows implicitly here, when cloning the session data for a new terminal
|
||||
CopyData(SourceData);
|
||||
FSource = SourceData->FSource;
|
||||
}
|
||||
@@ -457,9 +458,17 @@ void __fastcall TSessionData::Assign(TPersistent * Source)
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
void __fastcall TSessionData::CopyData(TSessionData * SourceData)
|
||||
void __fastcall TSessionData::DoCopyData(TSessionData * SourceData, bool NoRecrypt)
|
||||
{
|
||||
#define PROPERTY_HANDLER(P, F) F##P = SourceData->F##P
|
||||
#define PROPERTY_HANDLER(P, F) \
|
||||
if (NoRecrypt) \
|
||||
{ \
|
||||
F##P = SourceData->F##P; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
P = SourceData->P; \
|
||||
}
|
||||
PROPERTY(Name);
|
||||
BASE_PROPERTIES;
|
||||
ADVANCED_PROPERTIES;
|
||||
@@ -470,6 +479,16 @@ void __fastcall TSessionData::CopyData(TSessionData * SourceData)
|
||||
FSaveOnly = SourceData->FSaveOnly;
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
void __fastcall TSessionData::CopyData(TSessionData * SourceData)
|
||||
{
|
||||
DoCopyData(SourceData, false);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
void __fastcall TSessionData::CopyDataNoRecrypt(TSessionData * SourceData)
|
||||
{
|
||||
DoCopyData(SourceData, true);
|
||||
}
|
||||
//---------------------------------------------------------------------
|
||||
void __fastcall TSessionData::CopyDirectoriesStateData(TSessionData * SourceData)
|
||||
{
|
||||
RemoteDirectory = SourceData->RemoteDirectory;
|
||||
|
||||
@@ -445,6 +445,7 @@ private:
|
||||
TStrings * __fastcall SaveToOptions(const TSessionData * Default);
|
||||
void __fastcall ApplyRawSettings(TStrings * RawSettings);
|
||||
TStrings * __fastcall GetRawSettingsForUrl();
|
||||
void __fastcall DoCopyData(TSessionData * SourceData, bool NoRecrypt);
|
||||
template<class AlgoT>
|
||||
void __fastcall SetAlgoList(AlgoT * List, const AlgoT * DefaultList, const UnicodeString * Names,
|
||||
int Count, AlgoT WarnAlgo, UnicodeString value);
|
||||
@@ -475,6 +476,7 @@ public:
|
||||
virtual void __fastcall Assign(TPersistent * Source);
|
||||
virtual int __fastcall Compare(TNamedObject * Other);
|
||||
void __fastcall CopyData(TSessionData * Source);
|
||||
void __fastcall CopyDataNoRecrypt(TSessionData * SourceData);
|
||||
void __fastcall CopyDirectoriesStateData(TSessionData * SourceData);
|
||||
bool __fastcall ParseUrl(UnicodeString Url, TOptions * Options,
|
||||
TStoredSessionList * StoredSessions, bool & DefaultsOnly,
|
||||
|
||||
@@ -2336,7 +2336,7 @@ int __fastcall BatchSettings(TConsole * Console, TProgramParams * Params)
|
||||
{
|
||||
Matches++;
|
||||
std::unique_ptr<TSessionData> OriginalData(new TSessionData(L""));
|
||||
OriginalData->Assign(Data);
|
||||
OriginalData->CopyDataNoRecrypt(Data);
|
||||
Data->ApplyRawSettings(OptionsStorage.get());
|
||||
bool Changed = !OriginalData->IsSame(Data, false);
|
||||
if (Changed)
|
||||
|
||||
Reference in New Issue
Block a user