diff --git a/share/translations/keepassxc_en.ts b/share/translations/keepassxc_en.ts
index 0cf445a864..fd45487f50 100644
--- a/share/translations/keepassxc_en.ts
+++ b/share/translations/keepassxc_en.ts
@@ -2409,10 +2409,6 @@ removed from the database.
-
-
-
-
@@ -2445,6 +2441,14 @@ The command has to exit. In case of `sftp` as last command `exit` has to be sent
+
+
+
+
+
+
+
+
diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp b/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
index f66edba7e7..583b3cbca2 100644
--- a/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
+++ b/src/gui/remote/DatabaseSettingsWidgetRemote.cpp
@@ -18,6 +18,7 @@
#include "DatabaseSettingsWidgetRemote.h"
#include "ui_DatabaseSettingsWidgetRemote.h"
+#include "core/Database.h"
#include "core/Global.h"
#include "core/Metadata.h"
@@ -186,12 +187,12 @@ void DatabaseSettingsWidgetRemote::testDownload()
params->downloadInput = m_ui->inputForDownload->toPlainText();
params->downloadTimeoutMsec = m_ui->downloadTimeoutSec->value() * 1000;
- QScopedPointer remoteHandler(new RemoteHandler(this));
if (params->downloadCommand.isEmpty()) {
m_ui->messageWidget->showMessage(tr("Download command cannot be empty."), MessageWidget::Warning);
return;
}
+ QScopedPointer remoteHandler(new RemoteHandler(this));
RemoteHandler::RemoteResult result = remoteHandler->download(params);
if (!result.success) {
m_ui->messageWidget->showMessage(tr("Download failed with error: %1").arg(result.errorMessage),
@@ -200,10 +201,25 @@ void DatabaseSettingsWidgetRemote::testDownload()
}
if (!QFile::exists(result.filePath)) {
- m_ui->messageWidget->showMessage(tr("Download finished, but file %1 could not be found.").arg(result.filePath),
+ m_ui->messageWidget->showMessage(tr("Command finished, but downloaded file does not exist."),
MessageWidget::Error);
return;
}
+ QString error;
+ if (!hasValidPublicHeader(result.filePath, &error)) {
+ m_ui->messageWidget->showMessage(
+ tr("Downloaded file is not a KeePass file or it's an unsupported version: %1").arg(error),
+ MessageWidget::Error);
+ return;
+ }
+
m_ui->messageWidget->showMessage(tr("Download successful."), MessageWidget::Positive);
}
+
+bool DatabaseSettingsWidgetRemote::hasValidPublicHeader(QString& filePath, QString* error)
+{
+ // Read public headers
+ QScopedPointer db(new Database());
+ return db->open(filePath, nullptr, error);
+}
diff --git a/src/gui/remote/DatabaseSettingsWidgetRemote.h b/src/gui/remote/DatabaseSettingsWidgetRemote.h
index 6184e4bd91..8c5893f4f9 100644
--- a/src/gui/remote/DatabaseSettingsWidgetRemote.h
+++ b/src/gui/remote/DatabaseSettingsWidgetRemote.h
@@ -56,6 +56,8 @@ private slots:
QListWidgetItem* findItemByName(const QString& name);
void clearFields();
+ bool hasValidPublicHeader(QString& filePath, QString* error);
+
QScopedPointer m_remoteSettings;
const QScopedPointer m_ui;
bool m_modified = false;