Skip to content

Commit b5845c7

Browse files
committed
ssh-agent: Add global option to enable or disable destination contraints
Signed-off-by: Konrad Vité <[email protected]>
1 parent cfe35d9 commit b5845c7

File tree

7 files changed

+85
-38
lines changed

7 files changed

+85
-38
lines changed

src/core/Config.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,7 @@ static const QHash<Config::ConfigKey, ConfigDirective> configStrings = {
183183
{Config::SSHAgent_Enabled, {QS("SSHAgent/Enabled"), Roaming, false}},
184184
{Config::SSHAgent_UseOpenSSH, {QS("SSHAgent/UseOpenSSH"), Roaming, false}},
185185
{Config::SSHAgent_UsePageant, {QS("SSHAgent/UsePageant"), Roaming, true} },
186+
{Config::SSHAgent_EnableDestinationConstraints, {QS("SSHAgent/EnableDestinationConstraints"), Roaming, false} },
186187
{Config::SSHAgent_AuthSockOverride, {QS("SSHAgent/AuthSockOverride"), Local, {}}},
187188
{Config::SSHAgent_SecurityKeyProviderOverride, {QS("SSHAgent/SecurityKeyProviderOverride"), Local, {}}},
188189

src/core/Config.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ class Config : public QObject
162162
SSHAgent_Enabled,
163163
SSHAgent_UseOpenSSH,
164164
SSHAgent_UsePageant,
165+
SSHAgent_EnableDestinationConstraints,
165166
SSHAgent_AuthSockOverride,
166167
SSHAgent_SecurityKeyProviderOverride,
167168

src/sshagent/AgentSettingsWidget.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,20 @@ AgentSettingsWidget::AgentSettingsWidget(QWidget* parent)
3535
m_ui->sshAuthSockMessageWidget->setVisible(sshAgent()->isEnabled());
3636
m_ui->sshAuthSockMessageWidget->setCloseButtonVisible(false);
3737
m_ui->sshAuthSockMessageWidget->setAutoHideTimeout(-1);
38+
39+
m_ui->destinationConstraintsMessageWidget->setVisible(sshAgent()->enableDestinationConstraints());
40+
m_ui->destinationConstraintsMessageWidget->setCloseButtonVisible(false);
41+
m_ui->destinationConstraintsMessageWidget->setAutoHideTimeout(-1);
42+
m_ui->destinationConstraintsMessageWidget->showMessage(
43+
tr("Destination contrains can have unexpected side effects. "
44+
"Make sure to read the "
45+
"<a href=\"https://keepassxc.org/docs/#faq-ssh-agent-destination-constraints\">documentation</a>."),
46+
MessageWidget::Warning);
47+
3848
connect(m_ui->enableSSHAgentCheckBox, SIGNAL(stateChanged(int)), SLOT(toggleSettingsEnabled()));
49+
connect(m_ui->enableDestinationConstraintsCheckBox,
50+
SIGNAL(stateChanged(int)),
51+
SLOT(toggleDestinationConstraintsEnabled()));
3952
}
4053

4154
AgentSettingsWidget::~AgentSettingsWidget()
@@ -66,6 +79,9 @@ void AgentSettingsWidget::loadSettings()
6679

6780
m_ui->sshAuthSockMessageWidget->setVisible(sshAgentEnabled);
6881

82+
auto destinationConstraintsEnabled = sshAgent()->enableDestinationConstraints();
83+
m_ui->enableDestinationConstraintsCheckBox->setChecked(destinationConstraintsEnabled);
84+
6985
if (sshAgentEnabled) {
7086
#ifndef Q_OS_WIN
7187
if (sshAuthSock.isEmpty() && sshAuthSockOverride.isEmpty()) {
@@ -98,10 +114,16 @@ void AgentSettingsWidget::saveSettings()
98114
sshAgent()->setUsePageant(m_ui->usePageantRadioButton->isChecked() || m_ui->useBothRadioButton->isChecked());
99115
sshAgent()->setUseOpenSSH(m_ui->useOpenSSHRadioButton->isChecked() || m_ui->useBothRadioButton->isChecked());
100116
#endif
117+
sshAgent()->setEnableDestinationConstraints(m_ui->enableDestinationConstraintsCheckBox->isChecked());
101118
sshAgent()->setEnabled(m_ui->enableSSHAgentCheckBox->isChecked());
102119
}
103120

104121
void AgentSettingsWidget::toggleSettingsEnabled()
105122
{
106123
m_ui->agentConfigPageBody->setEnabled(m_ui->enableSSHAgentCheckBox->isChecked());
107124
}
125+
126+
void AgentSettingsWidget::toggleDestinationConstraintsEnabled()
127+
{
128+
m_ui->destinationConstraintsMessageWidget->setVisible(m_ui->enableDestinationConstraintsCheckBox->isChecked());
129+
}

src/sshagent/AgentSettingsWidget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ public slots:
3939
void loadSettings();
4040
void saveSettings();
4141
void toggleSettingsEnabled();
42+
void toggleDestinationConstraintsEnabled();
4243

4344
private:
4445
QScopedPointer<Ui::AgentSettingsWidget> m_ui;

src/sshagent/AgentSettingsWidget.ui

Lines changed: 46 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<x>0</x>
88
<y>0</y>
99
<width>400</width>
10-
<height>300</height>
10+
<height>443</height>
1111
</rect>
1212
</property>
1313
<layout class="QVBoxLayout" name="verticalLayout">
@@ -93,6 +93,16 @@
9393
</property>
9494
</widget>
9595
</item>
96+
<item>
97+
<widget class="QCheckBox" name="enableDestinationConstraintsCheckBox">
98+
<property name="text">
99+
<string>Enable destination constraints</string>
100+
</property>
101+
</widget>
102+
</item>
103+
<item>
104+
<widget class="MessageWidget" name="destinationConstraintsMessageWidget" native="true"/>
105+
</item>
96106
<item>
97107
<layout class="QGridLayout" name="agentValues">
98108
<property name="topMargin">
@@ -107,26 +117,47 @@
107117
<property name="verticalSpacing">
108118
<number>8</number>
109119
</property>
110-
<item row="1" column="0">
111-
<widget class="QLabel" name="sshAuthSockOverrideLabel">
120+
<item row="3" column="0">
121+
<widget class="QLabel" name="sshSecurityKeyProviderOverrideLabel">
112122
<property name="text">
113-
<string>SSH_AUTH_SOCK override</string>
123+
<string>SSH_SK_PROVIDER override</string>
114124
</property>
115125
<property name="alignment">
116126
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
117127
</property>
118128
</widget>
119129
</item>
120-
<item row="0" column="0">
121-
<widget class="QLabel" name="sshAuthSockValueLabel">
130+
<item row="1" column="1">
131+
<widget class="QLineEdit" name="sshAuthSockOverrideEdit"/>
132+
</item>
133+
<item row="2" column="0">
134+
<widget class="QLabel" name="sshSecurityKeyProviderValueLabel">
122135
<property name="text">
123-
<string>SSH_AUTH_SOCK value</string>
136+
<string>SSH_SK_PROVIDER value</string>
124137
</property>
125138
<property name="alignment">
126139
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
127140
</property>
128141
</widget>
129142
</item>
143+
<item row="0" column="1">
144+
<widget class="QLabel" name="sshAuthSockLabel">
145+
<property name="font">
146+
<font>
147+
<family>Monospace</family>
148+
</font>
149+
</property>
150+
<property name="text">
151+
<string>(empty)</string>
152+
</property>
153+
<property name="textInteractionFlags">
154+
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
155+
</property>
156+
</widget>
157+
</item>
158+
<item row="3" column="1">
159+
<widget class="QLineEdit" name="sshSecurityKeyProviderOverrideEdit"/>
160+
</item>
130161
<item row="4" column="0">
131162
<spacer name="verticalSpacer">
132163
<property name="orientation">
@@ -140,28 +171,20 @@
140171
</property>
141172
</spacer>
142173
</item>
143-
<item row="1" column="1">
144-
<widget class="QLineEdit" name="sshAuthSockOverrideEdit"/>
145-
</item>
146-
<item row="0" column="1">
147-
<widget class="QLabel" name="sshAuthSockLabel">
148-
<property name="font">
149-
<font>
150-
<family>Monospace</family>
151-
</font>
152-
</property>
174+
<item row="0" column="0">
175+
<widget class="QLabel" name="sshAuthSockValueLabel">
153176
<property name="text">
154-
<string>(empty)</string>
177+
<string>SSH_AUTH_SOCK value</string>
155178
</property>
156-
<property name="textInteractionFlags">
157-
<set>Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
179+
<property name="alignment">
180+
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
158181
</property>
159182
</widget>
160183
</item>
161-
<item row="2" column="0">
162-
<widget class="QLabel" name="sshSecurityKeyProviderValueLabel">
184+
<item row="1" column="0">
185+
<widget class="QLabel" name="sshAuthSockOverrideLabel">
163186
<property name="text">
164-
<string>SSH_SK_PROVIDER value</string>
187+
<string>SSH_AUTH_SOCK override</string>
165188
</property>
166189
<property name="alignment">
167190
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -183,19 +206,6 @@
183206
</property>
184207
</widget>
185208
</item>
186-
<item row="3" column="0">
187-
<widget class="QLabel" name="sshSecurityKeyProviderOverrideLabel">
188-
<property name="text">
189-
<string>SSH_SK_PROVIDER override</string>
190-
</property>
191-
<property name="alignment">
192-
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
193-
</property>
194-
</widget>
195-
</item>
196-
<item row="3" column="1">
197-
<widget class="QLineEdit" name="sshSecurityKeyProviderOverrideEdit"/>
198-
</item>
199209
</layout>
200210
</item>
201211
</layout>

src/sshagent/SSHAgent.cpp

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ void SSHAgent::setUsePageant(bool usePageant)
9898
}
9999
#endif
100100

101+
bool SSHAgent::enableDestinationConstraints() const
102+
{
103+
return config()->get(Config::SSHAgent_EnableDestinationConstraints).toBool();
104+
}
105+
106+
void SSHAgent::setEnableDestinationConstraints(bool enableDestinationConstraints)
107+
{
108+
config()->set(Config::SSHAgent_EnableDestinationConstraints, enableDestinationConstraints);
109+
}
110+
101111
QString SSHAgent::socketPath(bool allowOverride) const
102112
{
103113
QString socketPath;
@@ -305,7 +315,7 @@ bool SSHAgent::addIdentity(OpenSSHKey& key, const KeeAgentSettings& settings, co
305315
request.writeString(securityKeyProvider());
306316
}
307317

308-
if (settings.useDestinationConstraintsWhenAdding()) {
318+
if (enableDestinationConstraints() && settings.useDestinationConstraintsWhenAdding()) {
309319
request.write(SSH_AGENT_CONSTRAIN_EXTENSION);
310320
request.writeString(QString("[email protected]"));
311321
encodeDestinationConstraints(settings.destinationConstraints(), request);
@@ -328,7 +338,7 @@ bool SSHAgent::addIdentity(OpenSSHKey& key, const KeeAgentSettings& settings, co
328338
m_error += "\n" + tr("A confirmation request is not supported by the agent (check options).");
329339
}
330340

331-
if (settings.useDestinationConstraintsWhenAdding()) {
341+
if (enableDestinationConstraints() && settings.useDestinationConstraintsWhenAdding()) {
332342
m_error += "\n" + tr("Destination constraints are invalid or not supported by the agent (check options).");
333343
}
334344

src/sshagent/SSHAgent.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ class SSHAgent : public QObject
4848
void setUseOpenSSH(bool useOpenSSH);
4949
void setUsePageant(bool usePageant);
5050
#endif
51+
bool enableDestinationConstraints() const;
52+
void setEnableDestinationConstraints(bool enableDestinationConstraints);
5153

5254
const QString errorString() const;
5355
bool isAgentRunning() const;

0 commit comments

Comments
 (0)