1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

xen: reject unknown flags

Also fix a logic bug in xenXMDomain{Attach,Detach}DeviceFlags,
where (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT) is always false.

* src/xen/xen_driver.c (xenUnifiedDomainXMLFromNative)
(xenUnifiedDomainXMLToNative, xenUnifiedDomainBlockPeek): Reject
unknown flags.
* src/xen/xen_hypervisor.c (xenHypervisorOpen)
(xenHypervisorGetDomainState): Likewise.
* src/xen/xen_inotify.c (xenInotifyOpen): Likewise.
* src/xen/xs_internal.c (xenStoreOpen, xenStoreDomainGetState)
(xenStoreDomainReboot): Likewise.
* src/xen/xend_internal.c (xenDaemonOpen, xenDaemonDomainReboot)
(xenDaemonDomainCoreDump, xenDaemonDomainGetState)
(xenDaemonDomainMigratePrepare, xenDaemonDomainSetVcpusFlags,
xenDaemonDomainGetVcpusFlags, xenDaemonAttachDeviceFlags,
xenDaemonDetachDeviceFlags): Likewise.
(xenDaemonDomainGetXMLDesc): Prefer unsigned flags.
* src/xen/xend_internal.h (xenDaemonDomainGetXMLDesc): Likewise.
* src/xen/xm_internal.h (xenXMDomainGetXMLDesc): Likewise.
* src/xen/xm_internal.c (xenXMDomainGetXMLDesc): Likewise.
(xenXMOpen, xenXMDomainGetState, xenXMDomainSetVcpusFlags)
(xenXMDomainGetVcpusFlags): Reject unknown flags.
(xenXMDomainAttachDeviceFlags, xenXMDomainDetachDeviceFlags):
Likewise, and avoid always-false conditional.
* src/xen/xen_driver.h (XEN_MIGRATION_FLAGS): New define.
This commit is contained in:
Eric Blake 2011-07-06 17:15:33 -06:00
parent ca122578b3
commit 6a713b310a
9 changed files with 103 additions and 26 deletions

View File

@ -1261,7 +1261,7 @@ static char *
xenUnifiedDomainXMLFromNative(virConnectPtr conn, xenUnifiedDomainXMLFromNative(virConnectPtr conn,
const char *format, const char *format,
const char *config, const char *config,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
virDomainDefPtr def = NULL; virDomainDefPtr def = NULL;
char *ret = NULL; char *ret = NULL;
@ -1271,6 +1271,8 @@ xenUnifiedDomainXMLFromNative(virConnectPtr conn,
int vncport; int vncport;
GET_PRIVATE(conn); GET_PRIVATE(conn);
virCheckFlags(0, NULL);
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) && if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) { STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
xenUnifiedError(VIR_ERR_INVALID_ARG, xenUnifiedError(VIR_ERR_INVALID_ARG,
@ -1311,13 +1313,15 @@ static char *
xenUnifiedDomainXMLToNative(virConnectPtr conn, xenUnifiedDomainXMLToNative(virConnectPtr conn,
const char *format, const char *format,
const char *xmlData, const char *xmlData,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
virDomainDefPtr def = NULL; virDomainDefPtr def = NULL;
char *ret = NULL; char *ret = NULL;
virConfPtr conf = NULL; virConfPtr conf = NULL;
GET_PRIVATE(conn); GET_PRIVATE(conn);
virCheckFlags(0, NULL);
if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) && if (STRNEQ(format, XEN_CONFIG_FORMAT_XM) &&
STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) { STRNEQ(format, XEN_CONFIG_FORMAT_SEXPR)) {
xenUnifiedError(VIR_ERR_INVALID_ARG, xenUnifiedError(VIR_ERR_INVALID_ARG,
@ -1368,6 +1372,8 @@ xenUnifiedDomainMigratePrepare (virConnectPtr dconn,
{ {
GET_PRIVATE(dconn); GET_PRIVATE(dconn);
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
return xenDaemonDomainMigratePrepare (dconn, cookie, cookielen, return xenDaemonDomainMigratePrepare (dconn, cookie, cookielen,
uri_in, uri_out, uri_in, uri_out,
@ -1388,6 +1394,8 @@ xenUnifiedDomainMigratePerform (virDomainPtr dom,
{ {
GET_PRIVATE(dom->conn); GET_PRIVATE(dom->conn);
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) if (priv->opened[XEN_UNIFIED_XEND_OFFSET])
return xenDaemonDomainMigratePerform (dom, cookie, cookielen, uri, return xenDaemonDomainMigratePerform (dom, cookie, cookielen, uri,
flags, dname, resource); flags, dname, resource);
@ -1408,6 +1416,8 @@ xenUnifiedDomainMigrateFinish (virConnectPtr dconn,
char *domain_xml = NULL; char *domain_xml = NULL;
virDomainPtr dom_new = NULL; virDomainPtr dom_new = NULL;
virCheckFlags(XEN_MIGRATION_FLAGS, NULL);
dom = xenUnifiedDomainLookupByName (dconn, dname); dom = xenUnifiedDomainLookupByName (dconn, dname);
if (! dom) { if (! dom) {
return NULL; return NULL;
@ -1765,11 +1775,13 @@ xenUnifiedDomainInterfaceStats (virDomainPtr dom, const char *path,
static int static int
xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path, xenUnifiedDomainBlockPeek (virDomainPtr dom, const char *path,
unsigned long long offset, size_t size, unsigned long long offset, size_t size,
void *buffer, unsigned int flags ATTRIBUTE_UNUSED) void *buffer, unsigned int flags)
{ {
int r; int r;
GET_PRIVATE (dom->conn); GET_PRIVATE (dom->conn);
virCheckFlags(0, -1);
if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) { if (priv->opened[XEN_UNIFIED_XEND_OFFSET]) {
r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer); r = xenDaemonDomainBlockPeek (dom, path, offset, size, buffer);
if (r != -2) return r; if (r != -2) return r;

View File

@ -63,6 +63,13 @@ extern int xenRegister (void);
# define XEN_SCHED_SEDF_NPARAM 6 # define XEN_SCHED_SEDF_NPARAM 6
# define XEN_SCHED_CRED_NPARAM 2 # define XEN_SCHED_CRED_NPARAM 2
/* The set of migration flags explicitly supported by xen. */
# define XEN_MIGRATION_FLAGS \
(VIR_MIGRATE_LIVE | \
VIR_MIGRATE_UNDEFINE_SOURCE | \
VIR_MIGRATE_PAUSED | \
VIR_MIGRATE_PERSIST_DEST)
/* _xenUnifiedDriver: /* _xenUnifiedDriver:
* *
* Entry points into the underlying Xen drivers. This structure * Entry points into the underlying Xen drivers. This structure

View File

@ -2201,11 +2201,13 @@ xenHypervisorInit(void)
virDrvOpenStatus virDrvOpenStatus
xenHypervisorOpen(virConnectPtr conn, xenHypervisorOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
int ret; int ret;
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (initialized == 0) if (initialized == 0)
if (xenHypervisorInit() == -1) if (xenHypervisorInit() == -1)
return -1; return -1;
@ -3272,11 +3274,13 @@ int
xenHypervisorGetDomainState(virDomainPtr domain, xenHypervisorGetDomainState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = domain->conn->privateData; xenUnifiedPrivatePtr priv = domain->conn->privateData;
virDomainInfo info; virDomainInfo info;
virCheckFlags(0, -1);
if (domain->conn == NULL) if (domain->conn == NULL)
return -1; return -1;

View File

@ -383,13 +383,15 @@ cleanup:
virDrvOpenStatus virDrvOpenStatus
xenInotifyOpen(virConnectPtr conn, xenInotifyOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
DIR *dh; DIR *dh;
struct dirent *ent; struct dirent *ent;
char *path; char *path;
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (priv->configDir) { if (priv->configDir) {
priv->useXenConfigCache = 1; priv->useXenConfigCache = 1;
} else { } else {

View File

@ -1323,11 +1323,13 @@ error:
virDrvOpenStatus virDrvOpenStatus
xenDaemonOpen(virConnectPtr conn, xenDaemonOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
char *port = NULL; char *port = NULL;
int ret = VIR_DRV_OPEN_ERROR; int ret = VIR_DRV_OPEN_ERROR;
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
/* Switch on the scheme, which we expect to be NULL (file), /* Switch on the scheme, which we expect to be NULL (file),
* "http" or "xen". * "http" or "xen".
*/ */
@ -1488,8 +1490,10 @@ xenDaemonDomainShutdown(virDomainPtr domain)
* Returns 0 in case of success, -1 (with errno) in case of error. * Returns 0 in case of success, -1 (with errno) in case of error.
*/ */
int int
xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED) xenDaemonDomainReboot(virDomainPtr domain, unsigned int flags)
{ {
virCheckFlags(0, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(-1); return(-1);
@ -1629,8 +1633,10 @@ xenDaemonDomainSave(virDomainPtr domain, const char *filename)
*/ */
static int static int
xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename, xenDaemonDomainCoreDump(virDomainPtr domain, const char *filename,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
virCheckFlags(VIR_DUMP_LIVE | VIR_DUMP_CRASH, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) || if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) ||
(filename == NULL)) { (filename == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
@ -1837,12 +1843,15 @@ cleanup:
* the caller must free() the returned value. * the caller must free() the returned value.
*/ */
char * char *
xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus) xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
const char *cpus)
{ {
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
virDomainDefPtr def; virDomainDefPtr def;
char *xml; char *xml;
/* Flags checked by virDomainDefFormat */
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL); return(NULL);
@ -1921,11 +1930,13 @@ int
xenDaemonDomainGetState(virDomainPtr domain, xenDaemonDomainGetState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = domain->conn->privateData; xenUnifiedPrivatePtr priv = domain->conn->privateData;
struct sexpr *root; struct sexpr *root;
virCheckFlags(0, -1);
if (domain->id < 0 && priv->xendConfigVersion < 3) if (domain->id < 0 && priv->xendConfigVersion < 3)
return -1; return -1;
@ -2213,6 +2224,10 @@ xenDaemonDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
int max; int max;
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
VIR_DOMAIN_VCPU_CONFIG |
VIR_DOMAIN_VCPU_MAXIMUM, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL) if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)
|| (vcpus < 1)) { || (vcpus < 1)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
@ -2364,6 +2379,10 @@ xenDaemonDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
int ret; int ret;
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
VIR_DOMAIN_VCPU_CONFIG |
VIR_DOMAIN_VCPU_MAXIMUM, -1);
if (domain == NULL || domain->conn == NULL || domain->name == NULL) { if (domain == NULL || domain->conn == NULL || domain->name == NULL) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
@ -2660,6 +2679,8 @@ xenDaemonAttachDeviceFlags(virDomainPtr domain, const char *xml,
char class[8], ref[80]; char class[8], ref[80];
char *target = NULL; char *target = NULL;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
@ -2825,8 +2846,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr domain, const char *xml,
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
char class[8], ref[80]; char class[8], ref[80];
virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_CURRENT | virCheckFlags(VIR_DOMAIN_DEVICE_MODIFY_LIVE |
VIR_DOMAIN_DEVICE_MODIFY_LIVE |
VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1); VIR_DOMAIN_DEVICE_MODIFY_CONFIG, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
@ -2940,6 +2960,8 @@ xenDaemonDetachDeviceFlags(virDomainPtr domain, const char *xml,
char *xendev = NULL; char *xendev = NULL;
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXendError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return (-1); return (-1);
@ -3149,10 +3171,12 @@ xenDaemonDomainMigratePrepare (virConnectPtr dconn,
int *cookielen ATTRIBUTE_UNUSED, int *cookielen ATTRIBUTE_UNUSED,
const char *uri_in, const char *uri_in,
char **uri_out, char **uri_out,
unsigned long flags ATTRIBUTE_UNUSED, unsigned long flags,
const char *dname ATTRIBUTE_UNUSED, const char *dname ATTRIBUTE_UNUSED,
unsigned long resource ATTRIBUTE_UNUSED) unsigned long resource ATTRIBUTE_UNUSED)
{ {
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
/* If uri_in is NULL, get the current hostname as a best guess /* If uri_in is NULL, get the current hostname as a best guess
* of how the source host should connect to us. Note that caller * of how the source host should connect to us. Note that caller
* deallocates this string. * deallocates this string.
@ -3187,6 +3211,8 @@ xenDaemonDomainMigratePerform (virDomainPtr domain,
int undefined_source = 0; int undefined_source = 0;
virCheckFlags(XEN_MIGRATION_FLAGS, -1);
/* Xen doesn't support renaming domains during migration. */ /* Xen doesn't support renaming domains during migration. */
if (dname) { if (dname) {
virXendError(VIR_ERR_NO_SUPPORT, virXendError(VIR_ERR_NO_SUPPORT,

View File

@ -115,7 +115,8 @@ int xenDaemonDomainGetState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags); unsigned int flags);
char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, int flags, const char *cpus); char *xenDaemonDomainGetXMLDesc(virDomainPtr domain, unsigned int flags,
const char *cpus);
unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain); unsigned long xenDaemonDomainGetMaxMemory(virDomainPtr domain);
char **xenDaemonListDomainsOld(virConnectPtr xend); char **xenDaemonListDomainsOld(virConnectPtr xend);

View File

@ -442,10 +442,12 @@ int xenXMConfigCacheRefresh (virConnectPtr conn) {
virDrvOpenStatus virDrvOpenStatus
xenXMOpen (virConnectPtr conn, xenXMOpen (virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = conn->privateData; xenUnifiedPrivatePtr priv = conn->privateData;
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
priv->configDir = XM_CONFIG_DIR; priv->configDir = XM_CONFIG_DIR;
priv->configCache = virHashCreate(50, xenXMConfigFree); priv->configCache = virHashCreate(50, xenXMConfigFree);
@ -485,8 +487,10 @@ int
xenXMDomainGetState(virDomainPtr domain, xenXMDomainGetState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
virCheckFlags(0, -1);
if (domain->id != -1) if (domain->id != -1)
return -1; return -1;
@ -543,12 +547,15 @@ error:
* Turn a config record into a lump of XML describing the * Turn a config record into a lump of XML describing the
* domain, suitable for later feeding for virDomainCreateXML * domain, suitable for later feeding for virDomainCreateXML
*/ */
char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags) { char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags)
{
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
const char *filename; const char *filename;
xenXMConfCachePtr entry; xenXMConfCachePtr entry;
char *ret = NULL; char *ret = NULL;
/* Flags checked by virDomainDefFormat */
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__); xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(NULL); return(NULL);
@ -714,6 +721,10 @@ xenXMDomainSetVcpusFlags(virDomainPtr domain, unsigned int vcpus,
int ret = -1; int ret = -1;
int max; int max;
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
VIR_DOMAIN_VCPU_CONFIG |
VIR_DOMAIN_VCPU_MAXIMUM, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__); xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
@ -794,6 +805,10 @@ xenXMDomainGetVcpusFlags(virDomainPtr domain, unsigned int flags)
xenXMConfCachePtr entry; xenXMConfCachePtr entry;
int ret = -2; int ret = -2;
virCheckFlags(VIR_DOMAIN_VCPU_LIVE |
VIR_DOMAIN_VCPU_CONFIG |
VIR_DOMAIN_VCPU_MAXIMUM, -1);
if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) { if ((domain == NULL) || (domain->conn == NULL) || (domain->name == NULL)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__); xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
@ -1378,7 +1393,8 @@ cleanup:
*/ */
static int static int
xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml, xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
unsigned int flags) { unsigned int flags)
{
const char *filename = NULL; const char *filename = NULL;
xenXMConfCachePtr entry = NULL; xenXMConfCachePtr entry = NULL;
int ret = -1; int ret = -1;
@ -1386,6 +1402,8 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
virDomainDefPtr def; virDomainDefPtr def;
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) { if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__); xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
@ -1395,7 +1413,7 @@ xenXMDomainAttachDeviceFlags(virDomainPtr domain, const char *xml,
return -1; return -1;
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) || if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
(domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) { (domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
xenXMError(VIR_ERR_OPERATION_INVALID, "%s", xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
_("Xm driver only supports modifying persistent config")); _("Xm driver only supports modifying persistent config"));
return -1; return -1;
@ -1481,17 +1499,18 @@ xenXMDomainDetachDeviceFlags(virDomainPtr domain, const char *xml,
int i; int i;
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) { if ((!domain) || (!domain->conn) || (!domain->name) || (!xml)) {
xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__); xenXMError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return -1; return -1;
} }
if (domain->conn->flags & VIR_CONNECT_RO) if (domain->conn->flags & VIR_CONNECT_RO)
return -1; return -1;
if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) || if ((flags & VIR_DOMAIN_DEVICE_MODIFY_LIVE) ||
(domain->id != -1 && (flags & VIR_DOMAIN_DEVICE_MODIFY_CURRENT))) { (domain->id != -1 && flags == VIR_DOMAIN_DEVICE_MODIFY_CURRENT)) {
xenXMError(VIR_ERR_OPERATION_INVALID, "%s", xenXMError(VIR_ERR_OPERATION_INVALID, "%s",
_("Xm driver only supports modifying persistent config")); _("Xm driver only supports modifying persistent config"));
return -1; return -1;

View File

@ -45,7 +45,7 @@ int xenXMDomainGetState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags); unsigned int flags);
char *xenXMDomainGetXMLDesc(virDomainPtr domain, int flags); char *xenXMDomainGetXMLDesc(virDomainPtr domain, unsigned int flags);
int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory); int xenXMDomainSetMemory(virDomainPtr domain, unsigned long memory);
int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory); int xenXMDomainSetMaxMemory(virDomainPtr domain, unsigned long memory);
unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain); unsigned long xenXMDomainGetMaxMemory(virDomainPtr domain);

View File

@ -267,10 +267,12 @@ virDomainGetVMInfo(virDomainPtr domain, const char *vm, const char *name)
virDrvOpenStatus virDrvOpenStatus
xenStoreOpen(virConnectPtr conn, xenStoreOpen(virConnectPtr conn,
virConnectAuthPtr auth ATTRIBUTE_UNUSED, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData; xenUnifiedPrivatePtr priv = (xenUnifiedPrivatePtr) conn->privateData;
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (flags & VIR_CONNECT_RO) if (flags & VIR_CONNECT_RO)
priv->xshandle = xs_daemon_open_readonly(); priv->xshandle = xs_daemon_open_readonly();
else else
@ -461,10 +463,12 @@ int
xenStoreDomainGetState(virDomainPtr domain, xenStoreDomainGetState(virDomainPtr domain,
int *state, int *state,
int *reason, int *reason,
unsigned int flags ATTRIBUTE_UNUSED) unsigned int flags)
{ {
char *running; char *running;
virCheckFlags(0, -1);
if (domain->id == -1) if (domain->id == -1)
return -1; return -1;
@ -778,11 +782,13 @@ xenStoreDomainShutdown(virDomainPtr domain)
* Returns 0 in case of success, -1 in case of error. * Returns 0 in case of success, -1 in case of error.
*/ */
int int
xenStoreDomainReboot(virDomainPtr domain, unsigned int flags ATTRIBUTE_UNUSED) xenStoreDomainReboot(virDomainPtr domain, unsigned int flags)
{ {
int ret; int ret;
xenUnifiedPrivatePtr priv; xenUnifiedPrivatePtr priv;
virCheckFlags(0, -1);
if ((domain == NULL) || (domain->conn == NULL)) { if ((domain == NULL) || (domain->conn == NULL)) {
virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__); virXenStoreError(VIR_ERR_INVALID_ARG, __FUNCTION__);
return(-1); return(-1);