typedef virSecretObj *virSecretObjPtr;
struct _virSecretObj {
virSecretObjPtr next;
+ char *configFile;
virSecretDefPtr def;
unsigned char *value; /* May be NULL */
size_t value_size;
memset(secret->value, 0, secret->value_size);
VIR_FREE(secret->value);
}
+ VIR_FREE(secret->configFile);
VIR_FREE(secret);
}
return ret;
}
-static char *
-secretXMLPath(const virSecretObj *secret)
-{
- return secretComputePath(secret, ".xml");
-}
static char *
secretBase64Path(const virSecretObj *secret)
static int
secretSaveDef(const virSecretObj *secret)
{
- char *filename = NULL, *xml = NULL;
+ char *xml = NULL;
int ret = -1;
if (secretEnsureDirectory() < 0)
goto cleanup;
- if (!(filename = secretXMLPath(secret)))
- goto cleanup;
-
if (!(xml = virSecretDefFormat(secret->def)))
goto cleanup;
- if (virFileRewrite(filename, S_IRUSR | S_IWUSR,
+ if (virFileRewrite(secret->configFile, S_IRUSR | S_IWUSR,
secretRewriteFile, xml) < 0)
goto cleanup;
cleanup:
VIR_FREE(xml);
- VIR_FREE(filename);
return ret;
}
static int
secretDeleteSaved(const virSecretObj *secret)
{
- char *xml_filename = NULL, *value_filename = NULL;
+ char *value_filename = NULL;
int ret = -1;
- if (!(xml_filename = secretXMLPath(secret)))
- goto cleanup;
-
if (!(value_filename = secretBase64Path(secret)))
goto cleanup;
- if (unlink(xml_filename) < 0 && errno != ENOENT)
+ if (unlink(secret->configFile) < 0 && errno != ENOENT)
goto cleanup;
/* When the XML is missing, the rest may waste disk space, but the secret
won't be loaded again, so we have succeeded already. */
cleanup:
VIR_FREE(value_filename);
- VIR_FREE(xml_filename);
return ret;
}
secret->def = def;
def = NULL;
+ if (VIR_STRDUP(secret->configFile, path) < 0)
+ goto cleanup;
+
if (secretLoadValue(secret) < 0)
goto cleanup;
/* No existing secret with same UUID,
* try look for matching usage instead */
const char *usageID = secretUsageIDForDef(new_attrs);
+ char uuidstr[VIR_UUID_STRING_BUFLEN];
+
if ((secret = secretFindByUsage(new_attrs->usage_type, usageID))) {
- char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(secret->def->uuid, uuidstr);
virReportError(VIR_ERR_INTERNAL_ERROR,
_("a secret with UUID %s already defined for "
if (VIR_ALLOC(secret) < 0)
goto cleanup;
+ virUUIDFormat(secret->def->uuid, uuidstr);
+
+ /* Generate configFile using driver->configDir,
+ * the uuidstr, and .xml suffix */
+ if (!(secret->configFile = virFileBuildPath(driver->configDir,
+ uuidstr, ".xml"))) {
+ secretFree(secret);
+ goto cleanup;
+ }
+
listInsert(&driver->secrets, secret);
secret->def = new_attrs;
} else {