if (!(keyid = qemuDomainGetMasterKeyAlias()))
return -1;
- if (virJSONValueObjectCreate(propsret,
- "s:data", secinfo->s.aes.ciphertext,
- "s:keyid", keyid,
- "s:iv", secinfo->s.aes.iv,
- "s:format", "base64", NULL) < 0)
- goto cleanup;
-
- ret = 0;
+ ret = qemuMonitorCreateObjectProps(propsret,
+ "secret", secinfo->s.aes.alias,
+ "s:data", secinfo->s.aes.ciphertext,
+ "s:keyid", keyid,
+ "s:iv", secinfo->s.aes.iv,
+ "s:format", "base64", NULL);
- cleanup:
VIR_FREE(keyid);
-
return ret;
}
qemuBuildObjectSecretCommandLine(virCommandPtr cmd,
qemuDomainSecretInfoPtr secinfo)
{
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
int ret = -1;
virJSONValuePtr props = NULL;
- char *tmp = NULL;
if (qemuBuildSecretInfoProps(secinfo, &props) < 0)
return -1;
- if (!(tmp = virQEMUBuildObjectCommandlineFromJSONType("secret",
- secinfo->s.aes.alias,
- props)))
+ if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0)
goto cleanup;
- virCommandAddArgList(cmd, "-object", tmp, NULL);
- ret = 0;
+ virCommandAddArg(cmd, "-object");
+ virCommandAddArgBuffer(cmd, &buf);
+
+ ret = 0;
cleanup:
+ virBufferFreeAndReset(&buf);
virJSONValueFree(props);
- VIR_FREE(tmp);
-
return ret;
}
goto cleanup;
if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
- NULL, NULL, &tlsProps) < 0)
+ NULL, &tlsProps) < 0)
goto cleanup;
ret = 0;
char *drivestr = NULL;
char *drivealias = NULL;
char *prmgrAlias = NULL;
+ char *encobjAlias = NULL;
+ char *secobjAlias = NULL;
bool driveAdded = false;
- bool secobjAdded = false;
- bool encobjAdded = false;
bool prdStarted = false;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virJSONValuePtr secobjProps = NULL;
qemuDomainObjEnterMonitor(driver, vm);
- if (secobjProps) {
- rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias,
- secobjProps);
- secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
- if (rv < 0)
- goto exit_monitor;
- secobjAdded = true;
- }
+ if (secobjProps &&
+ qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
+ goto exit_monitor;
- if (encobjProps) {
- rv = qemuMonitorAddObjectType(priv->mon, "secret", encinfo->s.aes.alias,
- encobjProps);
- encobjProps = NULL; /* qemuMonitorAddObjectType consumes */
- if (rv < 0)
- goto exit_monitor;
- encobjAdded = true;
- }
+ if (encobjProps &&
+ qemuMonitorAddObject(priv->mon, &encobjProps, &encobjAlias) < 0)
+ goto exit_monitor;
if (prmgrProps &&
qemuMonitorAddObject(priv->mon, &prmgrProps, &prmgrAlias) < 0)
virJSONValueFree(secobjProps);
qemuDomainSecretDiskDestroy(disk);
VIR_FREE(prmgrAlias);
+ VIR_FREE(secobjAlias);
+ VIR_FREE(encobjAlias);
VIR_FREE(drivealias);
VIR_FREE(drivestr);
VIR_FREE(devstr);
VIR_WARN("Unable to remove drive %s (%s) after failed "
"qemuMonitorAddDevice", drivealias, drivestr);
}
- if (secobjAdded)
- ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias));
- if (encobjAdded)
- ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias));
+ if (secobjAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
+ if (encobjAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, encobjAlias));
if (prmgrAlias)
ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias));
if (qemuDomainObjExitMonitor(driver, vm) < 0)
qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob,
- const char *secAlias,
virJSONValuePtr *secProps,
virJSONValuePtr *tlsProps)
{
qemuDomainObjPrivatePtr priv = vm->privateData;
- int rc;
virErrorPtr orig_err;
+ char *secAlias = NULL;
- if (!tlsProps && !secAlias)
+ if (!tlsProps && !secProps)
return 0;
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1;
- if (secAlias) {
- rc = qemuMonitorAddObjectType(priv->mon, "secret",
- secAlias, *secProps);
- *secProps = NULL; /* qemuMonitorAddObjectType consumes */
- if (rc < 0)
- goto error;
- }
+ if (secProps &&
+ qemuMonitorAddObject(priv->mon, secProps, &secAlias) < 0)
+ goto error;
if (tlsProps &&
qemuMonitorAddObject(priv->mon, tlsProps, NULL) < 0)
goto error;
+ VIR_FREE(secAlias);
+
return qemuDomainObjExitMonitor(driver, vm);
error:
ignore_value(qemuDomainObjExitMonitor(driver, vm));
virErrorRestore(&orig_err);
qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, NULL);
+ VIR_FREE(secAlias);
return -1;
}
dev->data.tcp.tlscreds = true;
if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
- *secAlias, &secProps, &tlsProps) < 0)
+ &secProps, &tlsProps) < 0)
goto cleanup;
ret = 0;
virDomainHostdevDefPtr hostdev)
{
size_t i;
- int rv;
int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData;
virErrorPtr orig_err;
char *devstr = NULL;
char *drvstr = NULL;
char *drivealias = NULL;
+ char *secobjAlias = NULL;
bool teardowncgroup = false;
bool teardownlabel = false;
bool teardowndevice = false;
bool driveAdded = false;
- bool secobjAdded = false;
virJSONValuePtr secobjProps = NULL;
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
qemuDomainSecretInfoPtr secinfo = NULL;
qemuDomainObjEnterMonitor(driver, vm);
- if (secobjProps) {
- rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias,
- secobjProps);
- secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
- if (rv < 0)
- goto exit_monitor;
- secobjAdded = true;
- }
+ if (secobjProps &&
+ qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
+ goto exit_monitor;
if (qemuMonitorAddDrive(priv->mon, drvstr) < 0)
goto exit_monitor;
}
qemuDomainSecretHostdevDestroy(hostdev);
virJSONValueFree(secobjProps);
+ VIR_FREE(secobjAlias);
VIR_FREE(drivealias);
VIR_FREE(drvstr);
VIR_FREE(devstr);
"qemuMonitorAddDevice",
drvstr, devstr);
}
- if (secobjAdded)
- ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias));
+ if (secobjAlias)
+ ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
ignore_value(qemuDomainObjExitMonitor(driver, vm));
virErrorRestore(&orig_err);