}
static int
-virSecretDefParseUsage(virConnectPtr conn, xmlXPathContextPtr ctxt,
+virSecretDefParseUsage(xmlXPathContextPtr ctxt,
virSecretDefPtr def)
{
char *type_str;
type_str = virXPathString("string(./usage/@type)", ctxt);
if (type_str == NULL) {
- virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
+ virSecretReportError(VIR_ERR_XML_ERROR, "%s",
_("unknown secret usage type"));
return -1;
}
type = virSecretUsageTypeTypeFromString(type_str);
if (type < 0) {
- virSecretReportError(conn, VIR_ERR_XML_ERROR,
+ virSecretReportError(VIR_ERR_XML_ERROR,
_("unknown secret usage type %s"), type_str);
VIR_FREE(type_str);
return -1;
case VIR_SECRET_USAGE_TYPE_VOLUME:
def->usage.volume = virXPathString("string(./usage/volume)", ctxt);
if (!def->usage.volume) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("volume usage specified, but volume path is missing"));
return -1;
}
break;
default:
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected secret usage type %d"),
def->usage_type);
return -1;
}
static virSecretDefPtr
-secretXMLParseNode(virConnectPtr conn, xmlDocPtr xml, xmlNodePtr root)
+secretXMLParseNode(xmlDocPtr xml, xmlNodePtr root)
{
xmlXPathContextPtr ctxt = NULL;
virSecretDefPtr def = NULL, ret = NULL;
char *uuidstr = NULL;
if (!xmlStrEqual(root->name, BAD_CAST "secret")) {
- virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
+ virSecretReportError(VIR_ERR_XML_ERROR, "%s",
_("incorrect root element"));
goto cleanup;
}
else if (STREQ(prop, "no"))
def->ephemeral = 0;
else {
- virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
+ virSecretReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid value of 'ephemeral'"));
goto cleanup;
}
else if (STREQ(prop, "no"))
def->private = 0;
else {
- virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
+ virSecretReportError(VIR_ERR_XML_ERROR, "%s",
_("invalid value of 'private'"));
goto cleanup;
}
uuidstr = virXPathString("string(./uuid)", ctxt);
if (!uuidstr) {
if (virUUIDGenerate(def->uuid)) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("Failed to generate UUID"));
goto cleanup;
}
} else {
if (virUUIDParse(uuidstr, def->uuid) < 0) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
"%s", _("malformed uuid element"));
goto cleanup;
}
def->description = virXPathString("string(./description)", ctxt);
if (virXPathNode("./usage", ctxt) != NULL
- && virSecretDefParseUsage(conn, ctxt, def) < 0)
+ && virSecretDefParseUsage(ctxt, def) < 0)
goto cleanup;
ret = def;
def = NULL;
xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx;
if (ctxt) {
- virConnectPtr conn = ctxt->_private;
-
if (virGetLastError() == NULL &&
ctxt->lastError.level == XML_ERR_FATAL &&
ctxt->lastError.message != NULL) {
- virSecretReportError(conn, VIR_ERR_XML_DETAIL, _("at line %d: %s"),
+ virSecretReportError(VIR_ERR_XML_DETAIL, _("at line %d: %s"),
ctxt->lastError.line, ctxt->lastError.message);
}
}
}
static virSecretDefPtr
-virSecretDefParse(virConnectPtr conn, const char *xmlStr, const char *filename)
+virSecretDefParse(const char *xmlStr, const char *filename)
{
xmlParserCtxtPtr pctxt;
xmlDocPtr xml = NULL;
if (pctxt == NULL || pctxt->sax == NULL)
goto cleanup;
pctxt->sax->error = catchXMLError;
- pctxt->_private = conn;
if (filename != NULL)
xml = xmlCtxtReadFile(pctxt, filename, NULL,
XML_PARSE_NOENT | XML_PARSE_NONET |
XML_PARSE_NOWARNING);
if (xml == NULL) {
- if (conn->err.code == VIR_ERR_NONE)
- virSecretReportError(conn, VIR_ERR_XML_ERROR, "%s",
+ if (virGetLastError() == NULL)
+ virSecretReportError(VIR_ERR_XML_ERROR, "%s",
_("failed to parse xml document"));
goto cleanup;
}
root = xmlDocGetRootElement(xml);
if (root == NULL) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("missing root element"));
goto cleanup;
}
- ret = secretXMLParseNode(conn, xml, root);
+ ret = secretXMLParseNode(xml, root);
cleanup:
xmlFreeDoc(xml);
}
virSecretDefPtr
-virSecretDefParseString(virConnectPtr conn, const char *xmlStr)
+virSecretDefParseString(const char *xmlStr)
{
- return virSecretDefParse(conn, xmlStr, NULL);
+ return virSecretDefParse(xmlStr, NULL);
}
virSecretDefPtr
-virSecretDefParseFile(virConnectPtr conn, const char *filename)
+virSecretDefParseFile(const char *filename)
{
- return virSecretDefParse(conn, NULL, filename);
+ return virSecretDefParse(NULL, filename);
}
static int
-virSecretDefFormatUsage(virConnectPtr conn, virBufferPtr buf,
+virSecretDefFormatUsage(virBufferPtr buf,
const virSecretDefPtr def)
{
const char *type;
type = virSecretUsageTypeTypeToString(def->usage_type);
if (type == NULL) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected secret usage type %d"),
def->usage_type);
return -1;
break;
default:
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("unexpected secret usage type %d"),
def->usage_type);
return -1;
}
char *
-virSecretDefFormat(virConnectPtr conn, const virSecretDefPtr def)
+virSecretDefFormat(const virSecretDefPtr def)
{
virBuffer buf = VIR_BUFFER_INITIALIZER;
unsigned char *uuid;
virBufferEscapeString(&buf, " <description>%s</description>\n",
def->description);
if (def->usage_type != VIR_SECRET_USAGE_TYPE_NONE &&
- virSecretDefFormatUsage(conn, &buf, def) < 0)
+ virSecretDefFormatUsage(&buf, def) < 0)
goto error;
virBufferAddLit(&buf, "</secret>\n");
}
static char *
-secretXMLPath(virConnectPtr conn ATTRIBUTE_UNUSED /*TEMPORARY*/,
- virSecretDriverStatePtr driver,
+secretXMLPath(virSecretDriverStatePtr driver,
const virSecretEntry *secret)
{
return secretComputePath(driver, secret, ".xml");
}
static char *
-secretBase64Path(virConnectPtr conn ATTRIBUTE_UNUSED /*TEMPORARY*/,
- virSecretDriverStatePtr driver,
+secretBase64Path(virSecretDriverStatePtr driver,
const virSecretEntry *secret)
{
return secretComputePath(driver, secret, ".base64");
}
static int
-secretSaveDef(virConnectPtr conn, virSecretDriverStatePtr driver,
+secretSaveDef(virSecretDriverStatePtr driver,
const virSecretEntry *secret)
{
char *filename = NULL, *xml = NULL;
if (secretEnsureDirectory(driver) < 0)
goto cleanup;
- filename = secretXMLPath(conn, driver, secret);
+ filename = secretXMLPath(driver, secret);
if (filename == NULL)
goto cleanup;
- xml = virSecretDefFormat(conn, secret->def);
+ xml = virSecretDefFormat(secret->def);
if (xml == NULL)
goto cleanup;
}
static int
-secretSaveValue(virConnectPtr conn, virSecretDriverStatePtr driver,
+secretSaveValue(virSecretDriverStatePtr driver,
const virSecretEntry *secret)
{
char *filename = NULL, *base64 = NULL;
if (secretEnsureDirectory(driver) < 0)
goto cleanup;
- filename = secretBase64Path(conn, driver, secret);
+ filename = secretBase64Path(driver, secret);
if (filename == NULL)
goto cleanup;
base64_encode_alloc((const char *)secret->value, secret->value_size,
}
static int
-secretDeleteSaved(virConnectPtr conn, virSecretDriverStatePtr driver,
+secretDeleteSaved(virSecretDriverStatePtr driver,
const virSecretEntry *secret)
{
char *xml_filename = NULL, *value_filename = NULL;
int ret = -1;
- xml_filename = secretXMLPath(conn, driver, secret);
+ xml_filename = secretXMLPath(driver, secret);
if (xml_filename == NULL)
goto cleanup;
- value_filename = secretBase64Path(conn, driver, secret);
+ value_filename = secretBase64Path(driver, secret);
if (value_filename == NULL)
goto cleanup;
}
static int
-secretLoadValidateUUID(virConnectPtr conn, virSecretDefPtr def,
+secretLoadValidateUUID(virSecretDefPtr def,
const char *xml_basename)
{
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(def->uuid, uuidstr);
if (!virFileMatchesNameSuffix(xml_basename, uuidstr, ".xml")) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("<uuid> does not match secret file name '%s'"),
xml_basename);
return -1;
}
static int
-secretLoadValue(virConnectPtr conn, virSecretDriverStatePtr driver,
+secretLoadValue(virSecretDriverStatePtr driver,
virSecretEntryPtr secret)
{
int ret = -1, fd = -1;
char *filename = NULL, *contents = NULL, *value = NULL;
size_t value_size;
- filename = secretBase64Path(conn, driver, secret);
+ filename = secretBase64Path(driver, secret);
if (filename == NULL)
goto cleanup;
goto cleanup;
}
if ((size_t)st.st_size != st.st_size) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("'%s' file does not fit in memory"), filename);
goto cleanup;
}
fd = -1;
if (!base64_decode_alloc(contents, st.st_size, &value, &value_size)) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("invalid base64 in '%s'"), filename);
goto cleanup;
}
}
static virSecretEntryPtr
-secretLoad(virConnectPtr conn, virSecretDriverStatePtr driver,
+secretLoad(virSecretDriverStatePtr driver,
const char *xml_basename)
{
virSecretDefPtr def = NULL;
virReportOOMError();
goto cleanup;
}
- def = virSecretDefParseFile(conn, xml_filename);
+ def = virSecretDefParseFile(xml_filename);
if (def == NULL)
goto cleanup;
VIR_FREE(xml_filename);
- if (secretLoadValidateUUID(conn, def, xml_basename) < 0)
+ if (secretLoadValidateUUID(def, xml_basename) < 0)
goto cleanup;
if (VIR_ALLOC(secret) < 0) {
secret->def = def;
def = NULL;
- if (secretLoadValue(conn, driver, secret) < 0)
+ if (secretLoadValue(driver, secret) < 0)
goto cleanup;
ret = secret;
}
static int
-loadSecrets(virConnectPtr conn, virSecretDriverStatePtr driver,
+loadSecrets(virSecretDriverStatePtr driver,
virSecretEntryPtr *dest)
{
int ret = -1;
if (!virFileHasSuffix(de->d_name, ".xml"))
continue;
- secret = secretLoad(conn, driver, de->d_name);
+ secret = secretLoad(driver, de->d_name);
if (secret == NULL) {
virErrorPtr err = virGetLastError();
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(uuid, uuidstr);
- virSecretReportError(conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching uuid '%s'"), uuidstr);
goto cleanup;
}
secret = secretFindByUsage(driver, usageType, usageID);
if (secret == NULL) {
- virSecretReportError(conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching usage '%s'"), usageID);
goto cleanup;
}
virSecretDefPtr backup = NULL;
virSecretDefPtr new_attrs;
- new_attrs = virSecretDefParseString(conn, xml);
+ new_attrs = virSecretDefParseString(xml);
if (new_attrs == NULL)
return NULL;
if (secret) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(secret->def->uuid, uuidstr);
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("a secret with UUID %s already defined for use with %s"),
uuidstr, usageID);
goto cleanup;
if (STRNEQ(oldUsageID, newUsageID)) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(secret->def->uuid, uuidstr);
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR,
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR,
_("a secret with UUID %s is already defined for use with %s"),
uuidstr, oldUsageID);
goto cleanup;
}
if (secret->def->private && !new_attrs->private) {
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("cannot change private flag on existing secret"));
goto cleanup;
}
if (!new_attrs->ephemeral) {
if (backup && backup->ephemeral) {
- if (secretSaveValue(conn, driver, secret) < 0)
+ if (secretSaveValue(driver, secret) < 0)
goto restore_backup;
}
- if (secretSaveDef(conn, driver, secret) < 0) {
+ if (secretSaveDef(driver, secret) < 0) {
if (backup && backup->ephemeral) {
char *filename;
/* Undo the secretSaveValue() above; ignore errors */
- filename = secretBase64Path(conn, driver, secret);
+ filename = secretBase64Path(driver, secret);
if (filename != NULL)
(void)unlink(filename);
VIR_FREE(filename);
goto restore_backup;
}
} else if (backup && !backup->ephemeral) {
- if (secretDeleteSaved(conn, driver, secret) < 0)
+ if (secretDeleteSaved(driver, secret) < 0)
goto restore_backup;
}
/* Saved successfully - drop old values */
} else {
/* "secret" was added to the head of the list above */
if (listUnlink(&driverState->secrets) != secret)
- virSecretReportError(conn, VIR_ERR_INTERNAL_ERROR, "%s",
+ virSecretReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("list of secrets is inconsistent"));
else
secretFree(secret);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
- virSecretReportError(obj->conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching uuid '%s'"), uuidstr);
goto cleanup;
}
- ret = virSecretDefFormat(obj->conn, secret->def);
+ ret = virSecretDefFormat(secret->def);
cleanup:
secretDriverUnlock(driver);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
- virSecretReportError(obj->conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching uuid '%s'"), uuidstr);
goto cleanup;
}
secret->value = new_value;
secret->value_size = value_size;
if (!secret->def->ephemeral) {
- if (secretSaveValue(obj->conn, driver, secret) < 0)
+ if (secretSaveValue(driver, secret) < 0)
goto restore_backup;
}
/* Saved successfully - drop old value */
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
- virSecretReportError(obj->conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching uuid '%s'"), uuidstr);
goto cleanup;
}
if (secret->value == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
- virSecretReportError(obj->conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("secret '%s' does not have a value"), uuidstr);
goto cleanup;
}
if ((flags & VIR_SECRET_GET_VALUE_INTERNAL_CALL) == 0 &&
secret->def->private) {
- virSecretReportError(obj->conn, VIR_ERR_OPERATION_DENIED, "%s",
+ virSecretReportError(VIR_ERR_OPERATION_DENIED, "%s",
_("secret is private"));
goto cleanup;
}
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
- virSecretReportError(obj->conn, VIR_ERR_NO_SECRET,
+ virSecretReportError(VIR_ERR_NO_SECRET,
_("no secret with matching uuid '%s'"), uuidstr);
goto cleanup;
}
if (!secret->def->ephemeral &&
- secretDeleteSaved(obj->conn, driver, secret) < 0)
+ secretDeleteSaved(driver, secret) < 0)
goto cleanup;
if (driver->secrets == secret) {
goto out_of_memory;
VIR_FREE(base);
- if (loadSecrets(NULL, driverState, &driverState->secrets) < 0)
+ if (loadSecrets(driverState, &driverState->secrets) < 0)
goto error;
secretDriverUnlock(driverState);
secretDriverLock(driverState);
- if (loadSecrets(NULL, driverState, &new_secrets) < 0)
+ if (loadSecrets(driverState, &new_secrets) < 0)
goto end;
/* Keep ephemeral secrets from current state. Discard non-ephemeral secrets