From 9bcadfabaa95d6955b209f071b038af08abed434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Mon, 18 May 2015 12:37:38 +0200 Subject: [PATCH] virsh: add set-user-password command Expose the virDomainSetUserPassword API in virsh: virsh set-user-password dom user 123456 --- tools/virsh-domain.c | 74 ++++++++++++++++++++++++++++++++++++++++++++ tools/virsh.pod | 10 ++++++ 2 files changed, 84 insertions(+) diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c index 36f3e6c769..91a1ca20ca 100644 --- a/tools/virsh-domain.c +++ b/tools/virsh-domain.c @@ -5396,6 +5396,74 @@ cmdScreenshot(vshControl *ctl, const vshCmd *cmd) return ret; } +/* + * "set-user-password" command + */ +static const vshCmdInfo info_set_user_password[] = { + {.name = "help", + .data = N_("set the user password inside the domain") + }, + {.name = "desc", + .data = N_("changes the password of the specified user inside the domain") + }, + {.name = NULL} +}; + +static const vshCmdOptDef opts_set_user_password[] = { + {.name = "domain", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("domain name, id or uuid") + }, + {.name = "user", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("the username") + }, + {.name = "password", + .type = VSH_OT_DATA, + .flags = VSH_OFLAG_REQ, + .help = N_("the new password") + }, + {.name = "encrypted", + .type = VSH_OT_BOOL, + .help = N_("the password is already encrypted") + }, + {.name = NULL} +}; + +static bool +cmdSetUserPassword(vshControl *ctl, const vshCmd *cmd) +{ + virDomainPtr dom; + const char *name; + const char *password = NULL; + const char *user = NULL; + unsigned int flags = 0; + bool ret = false; + + if (vshCommandOptBool(cmd, "encrypted")) + flags = VIR_DOMAIN_PASSWORD_ENCRYPTED; + + if (vshCommandOptStringReq(ctl, cmd, "user", &user) < 0) + return false; + + if (vshCommandOptStringReq(ctl, cmd, "password", &password) < 0) + return false; + + if (!(dom = vshCommandOptDomain(ctl, cmd, &name))) + return false; + + if (virDomainSetUserPassword(dom, user, password, flags) < 0) + goto cleanup; + + vshPrint(ctl, _("Password set successfully for %s in %s"), user, name); + ret = true; + + cleanup: + virDomainFree(dom); + return ret; +} /* * "resume" command */ @@ -13207,6 +13275,12 @@ const vshCmdDef domManagementCmds[] = { .info = info_screenshot, .flags = 0 }, + {.name = "set-user-password", + .handler = cmdSetUserPassword, + .opts = opts_set_user_password, + .info = info_set_user_password, + .flags = 0 + }, {.name = "setmaxmem", .handler = cmdSetmaxmem, .opts = opts_setmaxmem, diff --git a/tools/virsh.pod b/tools/virsh.pod index 1bb655bdd7..d588e5ae53 100644 --- a/tools/virsh.pod +++ b/tools/virsh.pod @@ -2015,6 +2015,16 @@ the value from the host, use the B command. In order to view the current memory in use and the maximum value allowed to set memory, use the B command. +=item B I I I [I<--encrypted>] + +Set the password for the I account in the guest domain. + +If I<--encrypted> is specified, the password is assumed to be already +encrypted by the method required by the guest OS. + +For QEMU/KVM, this requires the guest agent to be configured +and running. + =item B I B [[I<--config>] [I<--live>] | [I<--current>]] -- GitLab