]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
virsh: add set-user-password command
authorJán Tomko <jtomko@redhat.com>
Mon, 18 May 2015 10:37:38 +0000 (12:37 +0200)
committerJán Tomko <jtomko@redhat.com>
Thu, 21 May 2015 14:21:55 +0000 (16:21 +0200)
Expose the virDomainSetUserPassword API in virsh:
virsh set-user-password dom user 123456

tools/virsh-domain.c
tools/virsh.pod

index 36f3e6c7699aac5cb61ed6b8ad2f0723181eff78..91a1ca20ca03563b33508077a7035d70ecd176f9 100644 (file)
@@ -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,
index 1bb655bdd7ee2ca9430f5ed2b2a90adef090db76..d588e5ae5370372e04a200c5e7a583ab94cbd47b 100644 (file)
@@ -2015,6 +2015,16 @@ the value from the host, use the B<virsh memtune> command. In order to view
 the current memory in use and the maximum value allowed to set memory, use
 the B<virsh dominfo> command.
 
+=item B<set-user-password> I<domain> I<user> I<password> [I<--encrypted>]
+
+Set the password for the I<user> 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<setmaxmem> I<domain> B<size> [[I<--config>] [I<--live>] |
 [I<--current>]]