summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAvi Kivity <avi@redhat.com>2009-12-14 17:08:17 +0200
committerAvi Kivity <avi@redhat.com>2009-12-14 17:08:17 +0200
commitdae8b87a625cb36abd86e2549e8594b677193b4e (patch)
tree53b892f1c3c4118e177149833095be19d800c950
parentMerge commit '0ea5709a32085f7d14901a09d12bd35f9b267607' into stable-0.12-merge (diff)
parentmonitor: Introduce 'block_passwd' command (diff)
downloadqemu-kvm-dae8b87a625cb36abd86e2549e8594b677193b4e.tar.gz
qemu-kvm-dae8b87a625cb36abd86e2549e8594b677193b4e.tar.bz2
qemu-kvm-dae8b87a625cb36abd86e2549e8594b677193b4e.zip
Merge commit 'b3dfdb5a3bae5fb3170397440dfebd579a3fcb04' into stable-0.12-merge
* commit 'b3dfdb5a3bae5fb3170397440dfebd579a3fcb04': monitor: Introduce 'block_passwd' command QError: Add class for invalid passwords Conflicts: qemu-monitor.hx Signed-off-by: Avi Kivity <avi@redhat.com>
-rw-r--r--monitor.c16
-rw-r--r--qemu-monitor.hx14
-rw-r--r--qerror.c4
-rw-r--r--qerror.h3
4 files changed, 37 insertions, 0 deletions
diff --git a/monitor.c b/monitor.c
index ee45a63ee..06d16462f 100644
--- a/monitor.c
+++ b/monitor.c
@@ -801,6 +801,22 @@ static void do_eject(Monitor *mon, const QDict *qdict, QObject **ret_data)
eject_device(mon, bs, force);
}
+static void do_block_set_passwd(Monitor *mon, const QDict *qdict,
+ QObject **ret_data)
+{
+ BlockDriverState *bs;
+
+ bs = bdrv_find(qdict_get_str(qdict, "device"));
+ if (!bs) {
+ qemu_error_new(QERR_DEVICE_NOT_FOUND, qdict_get_str(qdict, "device"));
+ return;
+ }
+
+ if (bdrv_set_key(bs, qdict_get_str(qdict, "password")) < 0) {
+ qemu_error_new(QERR_INVALID_PASSWORD);
+ }
+}
+
static void do_change_block(Monitor *mon, const char *device,
const char *filename, const char *fmt)
{
diff --git a/qemu-monitor.hx b/qemu-monitor.hx
index 2b14802d7..fdcdaa498 100644
--- a/qemu-monitor.hx
+++ b/qemu-monitor.hx
@@ -1048,6 +1048,20 @@ used by another monitor command.
ETEXI
{
+ .name = "block_passwd",
+ .args_type = "device:B,password:s",
+ .params = "block_passwd device password",
+ .help = "set the password of encrypted block devices",
+ .user_print = monitor_user_noop,
+ .mhandler.cmd_new = do_block_set_passwd,
+ },
+
+STEXI
+@item block_passwd @var{device} @var{password}
+Set the encrypted device @var{device} password to @var{password}
+ETEXI
+
+ {
.name = "cpu_set",
.args_type = "cpu:i,state:s",
.params = "cpu [online|offline]",
diff --git a/qerror.c b/qerror.c
index d00e5347e..eb4ce3331 100644
--- a/qerror.c
+++ b/qerror.c
@@ -57,6 +57,10 @@ static const QErrorStringTable qerror_table[] = {
.desc = "Invalid parameter type, expected: %(expected)",
},
{
+ .error_fmt = QERR_INVALID_PASSWORD,
+ .desc = "The entered password is invalid",
+ },
+ {
.error_fmt = QERR_KVM_MISSING_CAP,
.desc = "Using KVM without %(capability), %(feature) unavailable",
},
diff --git a/qerror.h b/qerror.h
index 5fd993146..5198adf14 100644
--- a/qerror.h
+++ b/qerror.h
@@ -50,6 +50,9 @@ QError *qobject_to_qerror(const QObject *obj);
#define QERR_INVALID_PARAMETER_TYPE \
"{ 'class': 'InvalidParameterType', 'data': { 'name': %s,'expected': %s } }"
+#define QERR_INVALID_PASSWORD \
+ "{ 'class': 'InvalidPassword', 'data': {} }"
+
#define QERR_KVM_MISSING_CAP \
"{ 'class': 'KVMMissingCap', 'data': { 'capability': %s, 'feature': %s } }"