Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/keepassxreboot/keepassxc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorToni Spets <toni.spets@iki.fi>2020-04-13 08:30:02 +0300
committerJonathan White <support@dmapps.us>2020-05-23 18:30:31 +0300
commita83345d13672c2ab3e7e77cd782fd66575cd773d (patch)
treeeae1186d37c1ea287a77d025afd09beae04448db /src
parent98566fec83bdef9aeb25e70457e4b4879ff4a8a3 (diff)
SSH Agent: Reset settings when KeeAgent.settings is removed
Fixes #4594
Diffstat (limited to 'src')
-rw-r--r--src/gui/DatabaseWidget.cpp2
-rw-r--r--src/gui/entry/EditEntryWidget.cpp29
-rw-r--r--src/gui/entry/EditEntryWidget.h1
-rw-r--r--src/sshagent/KeeAgentSettings.cpp32
-rw-r--r--src/sshagent/KeeAgentSettings.h20
5 files changed, 60 insertions, 24 deletions
diff --git a/src/gui/DatabaseWidget.cpp b/src/gui/DatabaseWidget.cpp
index 2881705bb..a068a5b83 100644
--- a/src/gui/DatabaseWidget.cpp
+++ b/src/gui/DatabaseWidget.cpp
@@ -1758,7 +1758,7 @@ bool DatabaseWidget::currentEntryHasSshKey()
return false;
}
- return KeeAgentSettings::inEntry(currentEntry);
+ return KeeAgentSettings::inEntryAttachments(currentEntry->attachments());
}
#endif
diff --git a/src/gui/entry/EditEntryWidget.cpp b/src/gui/entry/EditEntryWidget.cpp
index 2036a39ba..8274968b7 100644
--- a/src/gui/entry/EditEntryWidget.cpp
+++ b/src/gui/entry/EditEntryWidget.cpp
@@ -532,22 +532,24 @@ void EditEntryWidget::setupSSHAgent()
addPage(tr("SSH Agent"), Resources::instance()->icon("utilities-terminal"), m_sshAgentWidget);
}
-void EditEntryWidget::updateSSHAgent()
+void EditEntryWidget::setSSHAgentSettings()
{
- KeeAgentSettings settings;
- settings.fromEntry(m_entry);
-
- m_sshAgentUi->addKeyToAgentCheckBox->setChecked(settings.addAtDatabaseOpen());
- m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(settings.removeAtDatabaseClose());
- m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(settings.useConfirmConstraintWhenAdding());
- m_sshAgentUi->lifetimeCheckBox->setChecked(settings.useLifetimeConstraintWhenAdding());
- m_sshAgentUi->lifetimeSpinBox->setValue(settings.lifetimeConstraintDuration());
+ m_sshAgentUi->addKeyToAgentCheckBox->setChecked(m_sshAgentSettings.addAtDatabaseOpen());
+ m_sshAgentUi->removeKeyFromAgentCheckBox->setChecked(m_sshAgentSettings.removeAtDatabaseClose());
+ m_sshAgentUi->requireUserConfirmationCheckBox->setChecked(m_sshAgentSettings.useConfirmConstraintWhenAdding());
+ m_sshAgentUi->lifetimeCheckBox->setChecked(m_sshAgentSettings.useLifetimeConstraintWhenAdding());
+ m_sshAgentUi->lifetimeSpinBox->setValue(m_sshAgentSettings.lifetimeConstraintDuration());
m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->addToAgentButton->setEnabled(false);
m_sshAgentUi->removeFromAgentButton->setEnabled(false);
m_sshAgentUi->copyToClipboardButton->setEnabled(false);
+}
- m_sshAgentSettings = settings;
+void EditEntryWidget::updateSSHAgent()
+{
+ m_sshAgentSettings.reset();
+ m_sshAgentSettings.fromEntry(m_entry);
+ setSSHAgentSettings();
updateSSHAgentAttachments();
}
@@ -560,6 +562,13 @@ void EditEntryWidget::updateSSHAgentAttachment()
void EditEntryWidget::updateSSHAgentAttachments()
{
+ // detect if KeeAgent.settings was removed by hand and reset settings
+ if (m_entry && KeeAgentSettings::inEntryAttachments(m_entry->attachments())
+ && !KeeAgentSettings::inEntryAttachments(m_advancedUi->attachmentsWidget->entryAttachments())) {
+ m_sshAgentSettings.reset();
+ setSSHAgentSettings();
+ }
+
m_sshAgentUi->attachmentComboBox->clear();
m_sshAgentUi->attachmentComboBox->addItem("");
diff --git a/src/gui/entry/EditEntryWidget.h b/src/gui/entry/EditEntryWidget.h
index e0a67b5ea..ea630d7eb 100644
--- a/src/gui/entry/EditEntryWidget.h
+++ b/src/gui/entry/EditEntryWidget.h
@@ -111,6 +111,7 @@ private slots:
void pickColor();
#ifdef WITH_XC_SSHAGENT
void toKeeAgentSettings(KeeAgentSettings& settings) const;
+ void setSSHAgentSettings();
void updateSSHAgent();
void updateSSHAgentAttachment();
void updateSSHAgentAttachments();
diff --git a/src/sshagent/KeeAgentSettings.cpp b/src/sshagent/KeeAgentSettings.cpp
index f88735b98..e9f6e4bdd 100644
--- a/src/sshagent/KeeAgentSettings.cpp
+++ b/src/sshagent/KeeAgentSettings.cpp
@@ -19,6 +19,11 @@
#include "KeeAgentSettings.h"
#include "core/Tools.h"
+KeeAgentSettings::KeeAgentSettings()
+{
+ reset();
+}
+
bool KeeAgentSettings::operator==(const KeeAgentSettings& other) const
{
// clang-format off
@@ -51,6 +56,25 @@ bool KeeAgentSettings::isDefault() const
}
/**
+ * Reset this instance to default settings
+ */
+void KeeAgentSettings::reset()
+{
+ m_allowUseOfSshKey = false;
+ m_addAtDatabaseOpen = false;
+ m_removeAtDatabaseClose = false;
+ m_useConfirmConstraintWhenAdding = false;
+ m_useLifetimeConstraintWhenAdding = false;
+ m_lifetimeConstraintDuration = 600;
+
+ m_selectedType = QStringLiteral("file");
+ m_attachmentName.clear();
+ m_saveAttachmentToTempFile = false;
+ m_fileName.clear();
+ m_error.clear();
+}
+
+/**
* Get last error as a QString.
*
* @return translated error message
@@ -300,14 +324,14 @@ QByteArray KeeAgentSettings::toXml() const
}
/**
- * Check if an entry has KeeAgent settings configured
+ * Check if entry attachments have KeeAgent settings configured
*
- * @param entry Entry to check the attachment
+ * @param attachments EntryAttachments to check the key
* @return true if XML document exists
*/
-bool KeeAgentSettings::inEntry(const Entry* entry)
+bool KeeAgentSettings::inEntryAttachments(const EntryAttachments* attachments)
{
- return entry->attachments()->hasKey("KeeAgent.settings");
+ return attachments->hasKey("KeeAgent.settings");
}
/**
diff --git a/src/sshagent/KeeAgentSettings.h b/src/sshagent/KeeAgentSettings.h
index ec6fd3ee7..3cc701666 100644
--- a/src/sshagent/KeeAgentSettings.h
+++ b/src/sshagent/KeeAgentSettings.h
@@ -28,14 +28,16 @@
class KeeAgentSettings
{
public:
+ KeeAgentSettings();
bool operator==(const KeeAgentSettings& other) const;
bool operator!=(const KeeAgentSettings& other) const;
bool isDefault() const;
+ void reset();
bool fromXml(const QByteArray& ba);
QByteArray toXml() const;
- static bool inEntry(const Entry* entry);
+ static bool inEntryAttachments(const EntryAttachments* attachments);
bool fromEntry(const Entry* entry);
void toEntry(Entry* entry) const;
bool keyConfigured() const;
@@ -77,17 +79,17 @@ private:
bool readBool(QXmlStreamReader& reader);
int readInt(QXmlStreamReader& reader);
- bool m_allowUseOfSshKey = false;
- bool m_addAtDatabaseOpen = false;
- bool m_removeAtDatabaseClose = false;
- bool m_useConfirmConstraintWhenAdding = false;
- bool m_useLifetimeConstraintWhenAdding = false;
- int m_lifetimeConstraintDuration = 600;
+ bool m_allowUseOfSshKey;
+ bool m_addAtDatabaseOpen;
+ bool m_removeAtDatabaseClose;
+ bool m_useConfirmConstraintWhenAdding;
+ bool m_useLifetimeConstraintWhenAdding;
+ int m_lifetimeConstraintDuration;
// location
- QString m_selectedType = QString("file");
+ QString m_selectedType;
QString m_attachmentName;
- bool m_saveAttachmentToTempFile = false;
+ bool m_saveAttachmentToTempFile;
QString m_fileName;
QString m_error;
};