mirror of https://github.com/xqemu/xqemu.git
qapi: Convert expire_password
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
fbf796fd6f
commit
9ad5372daa
|
@ -4,7 +4,6 @@
|
||||||
#include "qemu-char.h"
|
#include "qemu-char.h"
|
||||||
#include "qdict.h"
|
#include "qdict.h"
|
||||||
#include "notify.h"
|
#include "notify.h"
|
||||||
#include "qerror.h"
|
|
||||||
#include "monitor.h"
|
#include "monitor.h"
|
||||||
|
|
||||||
/* keyboard/mouse support */
|
/* keyboard/mouse support */
|
||||||
|
@ -388,7 +387,6 @@ static inline int vnc_display_password(DisplayState *ds, const char *password)
|
||||||
}
|
}
|
||||||
static inline int vnc_display_pw_expire(DisplayState *ds, time_t expires)
|
static inline int vnc_display_pw_expire(DisplayState *ds, time_t expires)
|
||||||
{
|
{
|
||||||
qerror_report(QERR_FEATURE_DISABLED, "vnc");
|
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1239,8 +1239,7 @@ ETEXI
|
||||||
.args_type = "protocol:s,time:s",
|
.args_type = "protocol:s,time:s",
|
||||||
.params = "protocol time",
|
.params = "protocol time",
|
||||||
.help = "set spice/vnc password expire-time",
|
.help = "set spice/vnc password expire-time",
|
||||||
.user_print = monitor_user_noop,
|
.mhandler.cmd = hmp_expire_password,
|
||||||
.mhandler.cmd_new = expire_password,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
STEXI
|
STEXI
|
||||||
|
|
10
hmp.c
10
hmp.c
|
@ -692,3 +692,13 @@ void hmp_set_password(Monitor *mon, const QDict *qdict)
|
||||||
qmp_set_password(protocol, password, !!connected, connected, &err);
|
qmp_set_password(protocol, password, !!connected, connected, &err);
|
||||||
hmp_handle_error(mon, &err);
|
hmp_handle_error(mon, &err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hmp_expire_password(Monitor *mon, const QDict *qdict)
|
||||||
|
{
|
||||||
|
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||||
|
const char *whenstr = qdict_get_str(qdict, "time");
|
||||||
|
Error *err = NULL;
|
||||||
|
|
||||||
|
qmp_expire_password(protocol, whenstr, &err);
|
||||||
|
hmp_handle_error(mon, &err);
|
||||||
|
}
|
||||||
|
|
1
hmp.h
1
hmp.h
|
@ -50,5 +50,6 @@ void hmp_migrate_cancel(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
|
void hmp_migrate_set_downtime(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
|
void hmp_migrate_set_speed(Monitor *mon, const QDict *qdict);
|
||||||
void hmp_set_password(Monitor *mon, const QDict *qdict);
|
void hmp_set_password(Monitor *mon, const QDict *qdict);
|
||||||
|
void hmp_expire_password(Monitor *mon, const QDict *qdict);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
39
monitor.c
39
monitor.c
|
@ -884,45 +884,6 @@ static int do_change(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int expire_password(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
|
||||||
{
|
|
||||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
|
||||||
const char *whenstr = qdict_get_str(qdict, "time");
|
|
||||||
time_t when;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
if (strcmp(whenstr, "now") == 0) {
|
|
||||||
when = 0;
|
|
||||||
} else if (strcmp(whenstr, "never") == 0) {
|
|
||||||
when = TIME_MAX;
|
|
||||||
} else if (whenstr[0] == '+') {
|
|
||||||
when = time(NULL) + strtoull(whenstr+1, NULL, 10);
|
|
||||||
} else {
|
|
||||||
when = strtoull(whenstr, NULL, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(protocol, "spice") == 0) {
|
|
||||||
if (!using_spice) {
|
|
||||||
/* correct one? spice isn't a device ,,, */
|
|
||||||
qerror_report(QERR_DEVICE_NOT_ACTIVE, "spice");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
rc = qemu_spice_set_pw_expire(when);
|
|
||||||
if (rc != 0) {
|
|
||||||
qerror_report(QERR_SET_PASSWD_FAILED);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(protocol, "vnc") == 0) {
|
|
||||||
return vnc_display_pw_expire(NULL, when);
|
|
||||||
}
|
|
||||||
|
|
||||||
qerror_report(QERR_INVALID_PARAMETER, "protocol");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int add_graphics_client(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
static int add_graphics_client(Monitor *mon, const QDict *qdict, QObject **ret_data)
|
||||||
{
|
{
|
||||||
const char *protocol = qdict_get_str(qdict, "protocol");
|
const char *protocol = qdict_get_str(qdict, "protocol");
|
||||||
|
|
|
@ -1304,3 +1304,30 @@
|
||||||
##
|
##
|
||||||
{ 'command': 'set_password',
|
{ 'command': 'set_password',
|
||||||
'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
|
'data': {'protocol': 'str', 'password': 'str', '*connected': 'str'} }
|
||||||
|
|
||||||
|
##
|
||||||
|
# @expire_password:
|
||||||
|
#
|
||||||
|
# Expire the password of a remote display server.
|
||||||
|
#
|
||||||
|
# @protocol: the name of the remote display protocol `vnc' or `spice'
|
||||||
|
#
|
||||||
|
# @time: when to expire the password.
|
||||||
|
# `now' to expire the password immediately
|
||||||
|
# `never' to cancel password expiration
|
||||||
|
# `+INT' where INT is the number of seconds from now (integer)
|
||||||
|
# `INT' where INT is the absolute time in seconds
|
||||||
|
#
|
||||||
|
# Returns: Nothing on success
|
||||||
|
# If @protocol is `spice' and Spice is not active, DeviceNotFound
|
||||||
|
# If an error occurs setting password expiration, SetPasswdFailed
|
||||||
|
# If @protocol is not `spice' or 'vnc', InvalidParameter
|
||||||
|
#
|
||||||
|
# Since: 0.14.0
|
||||||
|
#
|
||||||
|
# Notes: Time is relative to the server and currently there is no way to
|
||||||
|
# coordinate server time with client time. It is not recommended to
|
||||||
|
# use the absolute time version of the @time parameter unless you're
|
||||||
|
# sure you are on the same machine as the QEMU instance.
|
||||||
|
##
|
||||||
|
{ 'command': 'expire_password', 'data': {'protocol': 'str', 'time': 'str'} }
|
||||||
|
|
|
@ -877,10 +877,7 @@ EQMP
|
||||||
{
|
{
|
||||||
.name = "expire_password",
|
.name = "expire_password",
|
||||||
.args_type = "protocol:s,time:s",
|
.args_type = "protocol:s,time:s",
|
||||||
.params = "protocol time",
|
.mhandler.cmd_new = qmp_marshal_input_expire_password,
|
||||||
.help = "set spice/vnc password expire-time",
|
|
||||||
.user_print = monitor_user_noop,
|
|
||||||
.mhandler.cmd_new = expire_password,
|
|
||||||
},
|
},
|
||||||
|
|
||||||
SQMP
|
SQMP
|
||||||
|
|
40
qmp.c
40
qmp.c
|
@ -303,3 +303,43 @@ void qmp_set_password(const char *protocol, const char *password,
|
||||||
|
|
||||||
error_set(errp, QERR_INVALID_PARAMETER, "protocol");
|
error_set(errp, QERR_INVALID_PARAMETER, "protocol");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qmp_expire_password(const char *protocol, const char *whenstr,
|
||||||
|
Error **errp)
|
||||||
|
{
|
||||||
|
time_t when;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
if (strcmp(whenstr, "now") == 0) {
|
||||||
|
when = 0;
|
||||||
|
} else if (strcmp(whenstr, "never") == 0) {
|
||||||
|
when = TIME_MAX;
|
||||||
|
} else if (whenstr[0] == '+') {
|
||||||
|
when = time(NULL) + strtoull(whenstr+1, NULL, 10);
|
||||||
|
} else {
|
||||||
|
when = strtoull(whenstr, NULL, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(protocol, "spice") == 0) {
|
||||||
|
if (!using_spice) {
|
||||||
|
/* correct one? spice isn't a device ,,, */
|
||||||
|
error_set(errp, QERR_DEVICE_NOT_ACTIVE, "spice");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
rc = qemu_spice_set_pw_expire(when);
|
||||||
|
if (rc != 0) {
|
||||||
|
error_set(errp, QERR_SET_PASSWD_FAILED);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(protocol, "vnc") == 0) {
|
||||||
|
rc = vnc_display_pw_expire(NULL, when);
|
||||||
|
if (rc != 0) {
|
||||||
|
error_set(errp, QERR_SET_PASSWD_FAILED);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_set(errp, QERR_INVALID_PARAMETER, "protocol");
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue