In v6.10.0-rc1~104 I've added a virsh command that exposes
virDomainAuthorizedSSHKeysSet() API under "set-user-sshkeys"
command. The command accepts mutually exclusive "--reset" and
"--remove" options (among others). While the former controls the
VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_APPEND flag, the latter
controls the VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_REMOVE flag.
These flags are also mutually exclusive. But the code that sets
them has a logical error which may result in both flags being
set. In fact, this results in user being not able to set just the
remove flag.
Fixes: 87d12effbea8b414c250b6fefd93154c62a99370
Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1904674
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
---
tools/virsh-domain.c | 21 +++++++++++----------
1 file changed, 11 insertions(+), 10 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 1fb4189b4b..6266c7acd2 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -14375,17 +14375,18 @@ cmdSetUserSSHKeys(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptStringReq(ctl, cmd, "file", &from) < 0)
goto cleanup;
- if (!vshCommandOptBool(cmd, "reset")) {
- flags |= VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_APPEND;
-
- if (!from) {
- vshError(ctl, _("Option --file is required"));
- goto cleanup;
- }
- }
-
- if (vshCommandOptBool(cmd, "remove"))
+ if (vshCommandOptBool(cmd, "remove")) {
flags |= VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_REMOVE;
+ } else {
+ if (!vshCommandOptBool(cmd, "reset")) {
+ flags |= VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_APPEND;
+
+ if (!from) {
+ vshError(ctl, _("Option --file is required"));
+ goto cleanup;
+ }
+ }
+ }
if (from) {
if (virFileReadAll(from, VSH_MAX_XML_FILE, &buffer) < 0) {
--
2.26.2