virsh: Fix logical error in cmdSetUserSSHKeys()

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: 87d12effbe
Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1904674
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2020-12-08 13:42:28 +01:00
parent cafbc6d1d2
commit 22e785b8ef

View File

@ -14375,18 +14375,19 @@ 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 (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) {
vshError(ctl, _("Option --file is required"));
goto cleanup;
}
}
}
if (vshCommandOptBool(cmd, "remove"))
flags |= VIR_DOMAIN_AUTHORIZED_SSH_KEYS_SET_REMOVE;
if (from) {
if (virFileReadAll(from, VSH_MAX_XML_FILE, &buffer) < 0) {
vshSaveLibvirtError();