1
0
mirror of https://github.com/veracrypt/VeraCrypt.git synced 2025-11-11 11:08:02 -06:00

Linux: Make the C++ code compatible with old compilers (g++ 4.4.7 on CentOS 6)

This commit is contained in:
Mounir IDRASSI
2024-06-30 01:22:05 +02:00
parent 1e7d6948c9
commit 9697416919
13 changed files with 138 additions and 130 deletions

View File

@@ -6,7 +6,7 @@ namespace VeraCrypt
{ {
SCardManager SCard::manager; SCardManager SCard::manager;
SCard::SCard() : m_reader(NULL) SCard::SCard()
{ {
} }

View File

@@ -320,7 +320,7 @@ namespace VeraCrypt
return scardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen); return scardStatus(hCard, mszReaderNames, pcchReaderLen, pdwState, pdwProtocol, pbAtr, pcbAtrLen);
} }
LONG SCardLoader::SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATE rgReaderStates, DWORD cReaders) LONG SCardLoader::SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout, SCARD_READERSTATE* rgReaderStates, DWORD cReaders)
{ {
Initialize(); Initialize();

View File

@@ -13,8 +13,6 @@
#include <PCSC/winscard.h> #include <PCSC/winscard.h>
#include <PCSC/wintypes.h> #include <PCSC/wintypes.h>
#include "reader.h" #include "reader.h"
typedef LPSCARD_READERSTATE_A LPSCARD_READERSTATE;
using VeraCrypt::uint8;
#define BOOL int #define BOOL int
#else #else
#undef BOOL #undef BOOL
@@ -22,7 +20,6 @@ using VeraCrypt::uint8;
#include <winscard.h> #include <winscard.h>
#include <wintypes.h> #include <wintypes.h>
#include <reader.h> #include <reader.h>
using VeraCrypt::uint8;
#define BOOL int #define BOOL int
#endif #endif
#endif #endif
@@ -48,7 +45,7 @@ namespace VeraCrypt
typedef LONG (SCARD_CALL_SPEC *SCardBeginTransactionPtr)(SCARDHANDLE hCard); typedef LONG (SCARD_CALL_SPEC *SCardBeginTransactionPtr)(SCARDHANDLE hCard);
typedef LONG (SCARD_CALL_SPEC *SCardEndTransactionPtr)(SCARDHANDLE hCard, DWORD dwDisposition); typedef LONG (SCARD_CALL_SPEC *SCardEndTransactionPtr)(SCARDHANDLE hCard, DWORD dwDisposition);
typedef LONG (SCARD_CALL_SPEC *SCardStatusPtr)(SCARDHANDLE hCard, LPTSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, BYTE* pbAtr, LPDWORD pcbAtrLen); typedef LONG (SCARD_CALL_SPEC *SCardStatusPtr)(SCARDHANDLE hCard, LPTSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, BYTE* pbAtr, LPDWORD pcbAtrLen);
typedef LONG (SCARD_CALL_SPEC *SCardGetStatusChangePtr)(SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATE rgReaderStates, DWORD cReaders); typedef LONG (SCARD_CALL_SPEC *SCardGetStatusChangePtr)(SCARDCONTEXT hContext, DWORD dwTimeout, SCARD_READERSTATE* rgReaderStates, DWORD cReaders);
typedef LONG (SCARD_CALL_SPEC *SCardControlPtr)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned); typedef LONG (SCARD_CALL_SPEC *SCardControlPtr)(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned);
typedef LONG (SCARD_CALL_SPEC *SCardTransmitPtr)(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, const BYTE* pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, BYTE* pbRecvBuffer, LPDWORD pcbRecvLength); typedef LONG (SCARD_CALL_SPEC *SCardTransmitPtr)(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, const BYTE* pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, BYTE* pbRecvBuffer, LPDWORD pcbRecvLength);
typedef LONG (SCARD_CALL_SPEC *SCardListReaderGroupsPtr)(SCARDCONTEXT hContext, LPTSTR mszGroups, LPDWORD pcchGroups); typedef LONG (SCARD_CALL_SPEC *SCardListReaderGroupsPtr)(SCARDCONTEXT hContext, LPTSTR mszGroups, LPDWORD pcchGroups);
@@ -111,7 +108,7 @@ namespace VeraCrypt
static LONG SCardBeginTransaction(SCARDHANDLE hCard); static LONG SCardBeginTransaction(SCARDHANDLE hCard);
static LONG SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition); static LONG SCardEndTransaction(SCARDHANDLE hCard, DWORD dwDisposition);
static LONG SCardStatus(SCARDHANDLE hCard, LPTSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, BYTE* pbAtr, LPDWORD pcbAtrLen); static LONG SCardStatus(SCARDHANDLE hCard, LPTSTR mszReaderNames, LPDWORD pcchReaderLen, LPDWORD pdwState, LPDWORD pdwProtocol, BYTE* pbAtr, LPDWORD pcbAtrLen);
static LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATE rgReaderStates, DWORD cReaders); static LONG SCardGetStatusChange(SCARDCONTEXT hContext, DWORD dwTimeout, SCARD_READERSTATE* rgReaderStates, DWORD cReaders);
static LONG SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned); static LONG SCardControl(SCARDHANDLE hCard, DWORD dwControlCode, LPCVOID pbSendBuffer, DWORD cbSendLength, LPVOID pbRecvBuffer, DWORD cbRecvLength, LPDWORD lpBytesReturned);
static LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, const BYTE* pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, BYTE* pbRecvBuffer, LPDWORD pcbRecvLength); static LONG SCardTransmit(SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, const BYTE* pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, BYTE* pbRecvBuffer, LPDWORD pcbRecvLength);
static LONG SCardListReaderGroups(SCARDCONTEXT hContext, LPTSTR mszGroups, LPDWORD pcchGroups); static LONG SCardListReaderGroups(SCARDCONTEXT hContext, LPTSTR mszGroups, LPDWORD pcchGroups);

View File

@@ -17,7 +17,7 @@ namespace VeraCrypt
} }
else else
{ {
m_scardLoader = NULL; m_scardLoader.reset();
m_hSCReaderContext = 0; m_hSCReaderContext = 0;
} }
m_hCard = hCard; m_hCard = hCard;
@@ -84,7 +84,7 @@ namespace VeraCrypt
void SCardReader::Clear(void) void SCardReader::Clear(void)
{ {
m_szSCReaderName = L""; m_szSCReaderName = L"";
m_scardLoader = NULL; m_scardLoader.reset();
m_hSCReaderContext = 0; m_hSCReaderContext = 0;
m_hCard = 0; m_hCard = 0;
m_dwProtocol = 0; m_dwProtocol = 0;

View File

@@ -169,7 +169,7 @@ namespace VeraCrypt
shared_ptr<TLVNode> TLVParser::TLV_Find(shared_ptr<TLVNode> node, uint16 tag) shared_ptr<TLVNode> TLVParser::TLV_Find(shared_ptr<TLVNode> node, uint16 tag)
{ {
size_t i = 0; size_t i = 0;
shared_ptr<TLVNode> tmpnode = NULL; shared_ptr<TLVNode> tmpnode;
if (node->Tag == tag) if (node->Tag == tag)
{ {
return node; return node;
@@ -177,11 +177,11 @@ namespace VeraCrypt
for (i = 0; i < node->Subs->size(); i++) for (i = 0; i < node->Subs->size(); i++)
{ {
tmpnode = TLV_Find(node->Subs->at(i),tag); tmpnode = TLV_Find(node->Subs->at(i),tag);
if (tmpnode != NULL) if (tmpnode)
{ {
return tmpnode; return tmpnode;
} }
} }
return NULL; return shared_ptr<TLVNode>();
} }
} }

View File

@@ -82,6 +82,51 @@ namespace VeraCrypt
LanguageListBox->Append("System default"); LanguageListBox->Append("System default");
LanguageListBox->Append("English"); LanguageListBox->Append("English");
langEntries = {
{"system", L"System default"},
{"ar", L"العربية"},
{"be", L"Беларуская"},
{"bg", L"Български"},
{"ca", L"Català"},
{"co", L"Corsu"},
{"cs", L"Čeština"},
{"da", L"Dansk"},
{"de", L"Deutsch"},
{"el", L"Ελληνικά"},
{"en", L"English"},
{"es", L"Español"},
{"et", L"Eesti"},
{"eu", L"Euskara"},
{"fa", L"فارسي"},
{"fi", L"Suomi"},
{"fr", L"Français"},
{"he", L"עברית"},
{"hu", L"Magyar"},
{"id", L"Bahasa Indonesia"},
{"it", L"Italiano"},
{"ja", L"日本語"},
{"ka", L"ქართული"},
{"ko", L"한국어"},
{"lv", L"Latviešu"},
{"nl", L"Nederlands"},
{"nn", L"Norsk Nynorsk"},
{"pl", L"Polski"},
{"ro", L"Română"},
{"ru", L"Русский"},
{"pt-br", L"Português-Brasil"},
{"sk", L"Slovenčina"},
{"sl", L"Slovenščina"},
{"sv", L"Svenska"},
{"th", L"ภาษาไทย"},
{"tr", L"Türkçe"},
{"uk", L"Українська"},
{"uz", L"Ўзбекча"},
{"vi", L"Tiếng Việt"},
{"zh-cn", L"简体中文"},
{"zh-hk", L"繁體中文(香港)"},
{"zh-tw", L"繁體中文"}
};
if (wxDir::Exists(languagesFolder.GetName())) { if (wxDir::Exists(languagesFolder.GetName())) {
size_t langCount; size_t langCount;
langCount = wxDir::GetAllFiles(languagesFolder.GetName(), &langArray, wxEmptyString, wxDIR_FILES); langCount = wxDir::GetAllFiles(languagesFolder.GetName(), &langArray, wxEmptyString, wxDIR_FILES);
@@ -435,11 +480,11 @@ namespace VeraCrypt
if (LanguageListBox->GetSelection() != wxNOT_FOUND) { if (LanguageListBox->GetSelection() != wxNOT_FOUND) {
wxString langToFind = LanguageListBox->GetString(LanguageListBox->GetSelection()); wxString langToFind = LanguageListBox->GetString(LanguageListBox->GetSelection());
for (const auto &each: langEntries) { for (map<wxString, std::wstring>::const_iterator each = langEntries.begin(); each != langEntries.end(); ++each) {
if (each.second == langToFind) { if (each->second == langToFind) {
Preferences.Language = each.first; Preferences.Language = each->first;
#ifdef DEBUG #ifdef DEBUG
cout << "Lang set to: " << each.first << endl; cout << "Lang set to: " << each->first << endl;
#endif #endif
} }
} }

View File

@@ -60,50 +60,7 @@ namespace VeraCrypt
UserPreferences Preferences; UserPreferences Preferences;
bool RestoreValidatorBell; bool RestoreValidatorBell;
HotkeyList UnregisteredHotkeys; HotkeyList UnregisteredHotkeys;
map<wxString, wstring> langEntries = { map<wxString, wstring> langEntries;
{"system", L"System default"},
{"ar", L"العربية"},
{"be", L"Беларуская"},
{"bg", L"Български"},
{"ca", L"Català"},
{"co", L"Corsu"},
{"cs", L"Čeština"},
{"da", L"Dansk"},
{"de", L"Deutsch"},
{"el", L"Ελληνικά"},
{"en", L"English"},
{"es", L"Español"},
{"et", L"Eesti"},
{"eu", L"Euskara"},
{"fa", L"فارسي"},
{"fi", L"Suomi"},
{"fr", L"Français"},
{"he", L"עברית"},
{"hu", L"Magyar"},
{"id", L"Bahasa Indonesia"},
{"it", L"Italiano"},
{"ja", L"日本語"},
{"ka", L"ქართული"},
{"ko", L"한국어"},
{"lv", L"Latviešu"},
{"nl", L"Nederlands"},
{"nn", L"Norsk Nynorsk"},
{"pl", L"Polski"},
{"ro", L"Română"},
{"ru", L"Русский"},
{"pt-br", L"Português-Brasil"},
{"sk", L"Slovenčina"},
{"sl", L"Slovenščina"},
{"sv", L"Svenska"},
{"th", L"ภาษาไทย"},
{"tr", L"Türkçe"},
{"uk", L"Українська"},
{"uz", L"Ўзбекча"},
{"vi", L"Tiếng Việt"},
{"zh-cn", L"简体中文"},
{"zh-hk", L"繁體中文(香港)"},
{"zh-tw", L"繁體中文"}
};
}; };
} }

View File

@@ -37,6 +37,19 @@
namespace VeraCrypt namespace VeraCrypt
{ {
class OpenOuterVolumeFunctor : public Functor
{
public:
OpenOuterVolumeFunctor (const DirectoryPath &outerVolumeMountPoint) : OuterVolumeMountPoint (outerVolumeMountPoint) { }
virtual void operator() ()
{
Gui->OpenExplorerWindow (OuterVolumeMountPoint);
}
DirectoryPath OuterVolumeMountPoint;
};
#ifdef TC_MACOSX #ifdef TC_MACOSX
bool VolumeCreationWizard::ProcessEvent(wxEvent& event) bool VolumeCreationWizard::ProcessEvent(wxEvent& event)
@@ -338,18 +351,6 @@ namespace VeraCrypt
return new InfoWizardPage (GetPageParent()); return new InfoWizardPage (GetPageParent());
} }
struct OpenOuterVolumeFunctor : public Functor
{
OpenOuterVolumeFunctor (const DirectoryPath &outerVolumeMountPoint) : OuterVolumeMountPoint (outerVolumeMountPoint) { }
virtual void operator() ()
{
Gui->OpenExplorerWindow (OuterVolumeMountPoint);
}
DirectoryPath OuterVolumeMountPoint;
};
InfoWizardPage *page = new InfoWizardPage (GetPageParent(), LangString["LINUX_OPEN_OUTER_VOL"], InfoWizardPage *page = new InfoWizardPage (GetPageParent(), LangString["LINUX_OPEN_OUTER_VOL"],
shared_ptr <Functor> (new OpenOuterVolumeFunctor (MountedOuterVolume->MountPoint))); shared_ptr <Functor> (new OpenOuterVolumeFunctor (MountedOuterVolume->MountPoint)));

View File

@@ -37,6 +37,33 @@
namespace VeraCrypt namespace VeraCrypt
{ {
class AdminPasswordRequestHandler : public GetStringFunctor
{
public:
virtual void operator() (string &passwordStr)
{
wxString sValue;
if (Gui->GetWaitDialog())
{
Gui->GetWaitDialog()->RequestAdminPassword(sValue);
if (sValue.IsEmpty())
throw UserAbort (SRC_POS);
}
else
{
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), LangString["LINUX_ADMIN_PW_QUERY"], LangString["LINUX_ADMIN_PW_QUERY_TITLE"]);
if (dialog.ShowModal() != wxID_OK)
throw UserAbort (SRC_POS);
sValue = dialog.GetValue();
}
wstring wPassword (sValue); // A copy of the password is created here by wxWidgets, which cannot be erased
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
StringConverter::ToSingle (wPassword, passwordStr);
}
};
#ifdef TC_MACOSX #ifdef TC_MACOSX
int GraphicUserInterface::g_customIdCmdV = 0; int GraphicUserInterface::g_customIdCmdV = 0;
int GraphicUserInterface::g_customIdCmdA = 0; int GraphicUserInterface::g_customIdCmdA = 0;
@@ -452,32 +479,6 @@ namespace VeraCrypt
shared_ptr <GetStringFunctor> GraphicUserInterface::GetAdminPasswordRequestHandler () shared_ptr <GetStringFunctor> GraphicUserInterface::GetAdminPasswordRequestHandler ()
{ {
struct AdminPasswordRequestHandler : public GetStringFunctor
{
virtual void operator() (string &passwordStr)
{
wxString sValue;
if (Gui->GetWaitDialog())
{
Gui->GetWaitDialog()->RequestAdminPassword(sValue);
if (sValue.IsEmpty())
throw UserAbort (SRC_POS);
}
else
{
wxPasswordEntryDialog dialog (Gui->GetActiveWindow(), LangString["LINUX_ADMIN_PW_QUERY"], LangString["LINUX_ADMIN_PW_QUERY_TITLE"]);
if (dialog.ShowModal() != wxID_OK)
throw UserAbort (SRC_POS);
sValue = dialog.GetValue();
}
wstring wPassword (sValue); // A copy of the password is created here by wxWidgets, which cannot be erased
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
StringConverter::ToSingle (wPassword, passwordStr);
}
};
return shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler); return shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler);
} }

View File

@@ -52,7 +52,10 @@ namespace VeraCrypt
StringFormatter (const wxString &format, StringFormatterArg arg0 = StringFormatterArg(), StringFormatterArg arg1 = StringFormatterArg(), StringFormatterArg arg2 = StringFormatterArg(), StringFormatterArg arg3 = StringFormatterArg(), StringFormatterArg arg4 = StringFormatterArg(), StringFormatterArg arg5 = StringFormatterArg(), StringFormatterArg arg6 = StringFormatterArg(), StringFormatterArg arg7 = StringFormatterArg(), StringFormatterArg arg8 = StringFormatterArg(), StringFormatterArg arg9 = StringFormatterArg()); StringFormatter (const wxString &format, StringFormatterArg arg0 = StringFormatterArg(), StringFormatterArg arg1 = StringFormatterArg(), StringFormatterArg arg2 = StringFormatterArg(), StringFormatterArg arg3 = StringFormatterArg(), StringFormatterArg arg4 = StringFormatterArg(), StringFormatterArg arg5 = StringFormatterArg(), StringFormatterArg arg6 = StringFormatterArg(), StringFormatterArg arg7 = StringFormatterArg(), StringFormatterArg arg8 = StringFormatterArg(), StringFormatterArg arg9 = StringFormatterArg());
virtual ~StringFormatter (); virtual ~StringFormatter ();
explicit operator wstring () const { return wstring (FormattedString); } #if (__cplusplus >= 201103L)
explicit
#endif
operator wstring () const { return wstring (FormattedString); }
operator wxString () const { return FormattedString; } operator wxString () const { return FormattedString; }
operator StringFormatterArg () const { return FormattedString; } operator StringFormatterArg () const { return FormattedString; }

View File

@@ -30,6 +30,27 @@
namespace VeraCrypt namespace VeraCrypt
{ {
class AdminPasswordRequestHandler : public GetStringFunctor
{
public:
AdminPasswordRequestHandler (TextUserInterface *userInterface) : UI (userInterface) { }
virtual void operator() (string &passwordStr)
{
UI->ShowString (_("Enter your user password or administrator password: "));
TextUserInterface::SetTerminalEcho (false);
finally_do ({ TextUserInterface::SetTerminalEcho (true); });
wstring wPassword (UI->ReadInputStreamLine());
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
UI->ShowString (L"\n");
StringConverter::ToSingle (wPassword, passwordStr);
}
TextUserInterface *UI;
};
TextUserInterface::TextUserInterface () TextUserInterface::TextUserInterface ()
{ {
#ifdef TC_UNIX #ifdef TC_UNIX
@@ -1095,26 +1116,6 @@ namespace VeraCrypt
shared_ptr <GetStringFunctor> TextUserInterface::GetAdminPasswordRequestHandler () shared_ptr <GetStringFunctor> TextUserInterface::GetAdminPasswordRequestHandler ()
{ {
struct AdminPasswordRequestHandler : public GetStringFunctor
{
AdminPasswordRequestHandler (TextUserInterface *userInterface) : UI (userInterface) { }
virtual void operator() (string &passwordStr)
{
UI->ShowString (_("Enter your user password or administrator password: "));
TextUserInterface::SetTerminalEcho (false);
finally_do ({ TextUserInterface::SetTerminalEcho (true); });
wstring wPassword (UI->ReadInputStreamLine());
finally_do_arg (wstring *, &wPassword, { StringConverter::Erase (*finally_arg); });
UI->ShowString (L"\n");
StringConverter::ToSingle (wPassword, passwordStr);
}
TextUserInterface *UI;
};
return shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler (this)); return shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler (this));
} }

View File

@@ -19,9 +19,11 @@
namespace VeraCrypt namespace VeraCrypt
{ {
class AdminPasswordRequestHandler;
class TextUserInterface : public UserInterface class TextUserInterface : public UserInterface
{ {
public: public:
friend class AdminPasswordRequestHandler;
TextUserInterface (); TextUserInterface ();
virtual ~TextUserInterface (); virtual ~TextUserInterface ();

View File

@@ -32,6 +32,15 @@
namespace VeraCrypt namespace VeraCrypt
{ {
class AdminPasswordRequestHandler : public GetStringFunctor
{
public:
virtual void operator() (string &str)
{
throw ElevationFailed (SRC_POS, "sudo", 1, "");
}
};
UserInterface::UserInterface () UserInterface::UserInterface ()
{ {
} }
@@ -558,14 +567,6 @@ namespace VeraCrypt
} }
else else
{ {
struct AdminPasswordRequestHandler : public GetStringFunctor
{
virtual void operator() (string &str)
{
throw ElevationFailed (SRC_POS, "sudo", 1, "");
}
};
Core->SetAdminPasswordCallback (shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler)); Core->SetAdminPasswordCallback (shared_ptr <GetStringFunctor> (new AdminPasswordRequestHandler));
} }