char *directory;
};
-static virSecretDriverStatePtr driverState;
+static virSecretDriverStatePtr driver;
static void
-secretDriverLock(virSecretDriverStatePtr driver)
+secretDriverLock(void)
{
virMutexLock(&driver->lock);
}
static void
-secretDriverUnlock(virSecretDriverStatePtr driver)
+secretDriverUnlock(void)
{
virMutexUnlock(&driver->lock);
}
}
static virSecretEntryPtr
-secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid)
+secretFindByUUID(const unsigned char *uuid)
{
virSecretEntryPtr *pptr, s;
}
static virSecretEntryPtr
-secretFindByUsage(virSecretDriverStatePtr driver, int usageType, const char *usageID)
+secretFindByUsage(int usageType, const char *usageID)
{
virSecretEntryPtr *pptr, s;
}
static char *
-secretComputePath(virSecretDriverStatePtr driver,
- const virSecretEntry *secret, const char *suffix)
+secretComputePath(const virSecretEntry *secret, const char *suffix)
{
char *ret;
char uuidstr[VIR_UUID_STRING_BUFLEN];
}
static char *
-secretXMLPath(virSecretDriverStatePtr driver,
- const virSecretEntry *secret)
+secretXMLPath(const virSecretEntry *secret)
{
- return secretComputePath(driver, secret, ".xml");
+ return secretComputePath(secret, ".xml");
}
static char *
-secretBase64Path(virSecretDriverStatePtr driver,
- const virSecretEntry *secret)
+secretBase64Path(const virSecretEntry *secret)
{
- return secretComputePath(driver, secret, ".base64");
+ return secretComputePath(secret, ".base64");
}
static int
-secretEnsureDirectory(virSecretDriverStatePtr driver)
+secretEnsureDirectory(void)
{
if (mkdir(driver->directory, S_IRWXU) < 0 && errno != EEXIST) {
virReportSystemError(errno, _("cannot create '%s'"),
}
static int
-secretSaveDef(virSecretDriverStatePtr driver,
- const virSecretEntry *secret)
+secretSaveDef(const virSecretEntry *secret)
{
char *filename = NULL, *xml = NULL;
int ret = -1;
- if (secretEnsureDirectory(driver) < 0)
+ if (secretEnsureDirectory() < 0)
goto cleanup;
- filename = secretXMLPath(driver, secret);
+ filename = secretXMLPath(secret);
if (filename == NULL)
goto cleanup;
xml = virSecretDefFormat(secret->def);
}
static int
-secretSaveValue(virSecretDriverStatePtr driver,
- const virSecretEntry *secret)
+secretSaveValue(const virSecretEntry *secret)
{
char *filename = NULL, *base64 = NULL;
int ret = -1;
if (secret->value == NULL)
return 0;
- if (secretEnsureDirectory(driver) < 0)
+ if (secretEnsureDirectory() < 0)
goto cleanup;
- filename = secretBase64Path(driver, secret);
+ filename = secretBase64Path(secret);
if (filename == NULL)
goto cleanup;
base64_encode_alloc((const char *)secret->value, secret->value_size,
}
static int
-secretDeleteSaved(virSecretDriverStatePtr driver,
- const virSecretEntry *secret)
+secretDeleteSaved(const virSecretEntry *secret)
{
char *xml_filename = NULL, *value_filename = NULL;
int ret = -1;
- xml_filename = secretXMLPath(driver, secret);
+ xml_filename = secretXMLPath(secret);
if (xml_filename == NULL)
goto cleanup;
- value_filename = secretBase64Path(driver, secret);
+ value_filename = secretBase64Path(secret);
if (value_filename == NULL)
goto cleanup;
}
static int
-secretLoadValue(virSecretDriverStatePtr driver,
- virSecretEntryPtr secret)
+secretLoadValue(virSecretEntryPtr secret)
{
int ret = -1, fd = -1;
struct stat st;
char *filename = NULL, *contents = NULL, *value = NULL;
size_t value_size;
- filename = secretBase64Path(driver, secret);
+ filename = secretBase64Path(secret);
if (filename == NULL)
goto cleanup;
}
static virSecretEntryPtr
-secretLoad(virSecretDriverStatePtr driver,
- const char *xml_basename)
+secretLoad(const char *xml_basename)
{
virSecretDefPtr def = NULL;
virSecretEntryPtr secret = NULL, ret = NULL;
secret->def = def;
def = NULL;
- if (secretLoadValue(driver, secret) < 0)
+ if (secretLoadValue(secret) < 0)
goto cleanup;
ret = secret;
}
static int
-loadSecrets(virSecretDriverStatePtr driver,
- virSecretEntryPtr *dest)
+loadSecrets(virSecretEntryPtr *dest)
{
int ret = -1;
DIR *dir = NULL;
if (!virFileHasSuffix(de->d_name, ".xml"))
continue;
- secret = secretLoad(driver, de->d_name);
+ secret = secretLoad(de->d_name);
if (secret == NULL) {
virErrorPtr err = virGetLastError();
\f /* Driver functions */
static virDrvOpenStatus
-secretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED,
+secretOpen(virConnectPtr conn ATTRIBUTE_UNUSED,
+ virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags)
{
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
- if (driverState == NULL)
+ if (driver == NULL)
return VIR_DRV_OPEN_DECLINED;
- conn->secretPrivateData = driverState;
return VIR_DRV_OPEN_SUCCESS;
}
static int
-secretClose(virConnectPtr conn)
+secretClose(virConnectPtr conn ATTRIBUTE_UNUSED)
{
- conn->secretPrivateData = NULL;
return 0;
}
static int
secretConnectNumOfSecrets(virConnectPtr conn)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
size_t i;
virSecretEntryPtr secret;
if (virConnectNumOfSecretsEnsureACL(conn) < 0)
return -1;
- secretDriverLock(driver);
+ secretDriverLock();
i = 0;
for (secret = driver->secrets; secret != NULL; secret = secret->next) {
i++;
}
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return i;
}
static int
secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
size_t i;
virSecretEntryPtr secret;
if (virConnectListSecretsEnsureACL(conn) < 0)
return -1;
- secretDriverLock(driver);
+ secretDriverLock();
i = 0;
for (secret = driver->secrets; secret != NULL; secret = secret->next) {
i++;
}
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return i;
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
for (i = 0; i < maxuuids; i++)
VIR_FREE(uuids[i]);
virSecretPtr **secrets,
unsigned int flags)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr *tmp_secrets = NULL;
int nsecrets = 0;
int ret_nsecrets = 0;
if (virConnectListAllSecretsEnsureACL(conn) < 0)
return -1;
- secretDriverLock(driver);
+ secretDriverLock();
for (entry = driver->secrets; entry != NULL; entry = entry->next)
nsecrets++;
ret = ret_nsecrets;
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
if (tmp_secrets) {
for (i = 0; i < ret_nsecrets; i ++)
virObjectUnref(tmp_secrets[i]);
static virSecretPtr
secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL;
virSecretEntryPtr secret;
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUUID(driver, uuid);
+ secret = secretFindByUUID(uuid);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(uuid, uuidstr);
secretUsageIDForDef(secret->def));
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
static virSecretPtr
secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL;
virSecretEntryPtr secret;
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUsage(driver, usageType, usageID);
+ secret = secretFindByUsage(usageType, usageID);
if (secret == NULL) {
virReportError(VIR_ERR_NO_SECRET,
_("no secret with matching usage '%s'"), usageID);
secretUsageIDForDef(secret->def));
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
secretDefineXML(virConnectPtr conn, const char *xml,
unsigned int flags)
{
- virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL;
virSecretEntryPtr secret;
virSecretDefPtr backup = NULL;
if (new_attrs == NULL)
return NULL;
- secretDriverLock(driver);
+ secretDriverLock();
if (virSecretDefineXMLEnsureACL(conn, new_attrs) < 0)
goto cleanup;
- secret = secretFindByUUID(driver, new_attrs->uuid);
+ secret = secretFindByUUID(new_attrs->uuid);
if (secret == NULL) {
/* No existing secret with same UUID, try look for matching usage instead */
const char *usageID = secretUsageIDForDef(new_attrs);
- secret = secretFindByUsage(driver, new_attrs->usage_type, usageID);
+ secret = secretFindByUsage(new_attrs->usage_type, usageID);
if (secret) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(secret->def->uuid, uuidstr);
if (!new_attrs->ephemeral) {
if (backup && backup->ephemeral) {
- if (secretSaveValue(driver, secret) < 0)
+ if (secretSaveValue(secret) < 0)
goto restore_backup;
}
- if (secretSaveDef(driver, secret) < 0) {
+ if (secretSaveDef(secret) < 0) {
if (backup && backup->ephemeral) {
char *filename;
/* Undo the secretSaveValue() above; ignore errors */
- filename = secretBase64Path(driver, secret);
+ filename = secretBase64Path(secret);
if (filename != NULL)
(void)unlink(filename);
VIR_FREE(filename);
goto restore_backup;
}
} else if (backup && !backup->ephemeral) {
- if (secretDeleteSaved(driver, secret) < 0)
+ if (secretDeleteSaved(secret) < 0)
goto restore_backup;
}
/* Saved successfully - drop old values */
secret->def = backup;
} else {
/* "secret" was added to the head of the list above */
- if (listUnlink(&driverState->secrets) != secret)
+ if (listUnlink(&driver->secrets) != secret)
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("list of secrets is inconsistent"));
else
cleanup:
virSecretDefFree(new_attrs);
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
static char *
secretGetXMLDesc(virSecretPtr obj, unsigned int flags)
{
- virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
char *ret = NULL;
virSecretEntryPtr secret;
virCheckFlags(0, NULL);
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUUID(driver, obj->uuid);
+ secret = secretFindByUUID(obj->uuid);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
ret = virSecretDefFormat(secret->def);
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
secretSetValue(virSecretPtr obj, const unsigned char *value,
size_t value_size, unsigned int flags)
{
- virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
int ret = -1;
unsigned char *old_value, *new_value;
size_t old_value_size;
if (VIR_ALLOC_N(new_value, value_size) < 0)
return -1;
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUUID(driver, obj->uuid);
+ secret = secretFindByUUID(obj->uuid);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
secret->value = new_value;
secret->value_size = value_size;
if (!secret->def->ephemeral) {
- if (secretSaveValue(driver, secret) < 0)
+ if (secretSaveValue(secret) < 0)
goto restore_backup;
}
/* Saved successfully - drop old value */
memset(new_value, 0, value_size);
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
VIR_FREE(new_value);
secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
unsigned int internalFlags)
{
- virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
unsigned char *ret = NULL;
virSecretEntryPtr secret;
virCheckFlags(0, NULL);
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUUID(driver, obj->uuid);
+ secret = secretFindByUUID(obj->uuid);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
*value_size = secret->value_size;
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
static int
secretUndefine(virSecretPtr obj)
{
- virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
int ret = -1;
virSecretEntryPtr secret;
- secretDriverLock(driver);
+ secretDriverLock();
- secret = secretFindByUUID(driver, obj->uuid);
+ secret = secretFindByUUID(obj->uuid);
if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr);
goto cleanup;
if (!secret->def->ephemeral &&
- secretDeleteSaved(driver, secret) < 0)
+ secretDeleteSaved(secret) < 0)
goto cleanup;
if (driver->secrets == secret) {
ret = 0;
cleanup:
- secretDriverUnlock(driver);
+ secretDriverUnlock();
return ret;
}
static int
secretStateCleanup(void)
{
- if (driverState == NULL)
+ if (driver == NULL)
return -1;
- secretDriverLock(driverState);
+ secretDriverLock();
- while (driverState->secrets != NULL) {
+ while (driver->secrets != NULL) {
virSecretEntryPtr s;
- s = listUnlink(&driverState->secrets);
+ s = listUnlink(&driver->secrets);
secretFree(s);
}
- VIR_FREE(driverState->directory);
+ VIR_FREE(driver->directory);
- secretDriverUnlock(driverState);
- virMutexDestroy(&driverState->lock);
- VIR_FREE(driverState);
+ secretDriverUnlock();
+ virMutexDestroy(&driver->lock);
+ VIR_FREE(driver);
return 0;
}
{
char *base = NULL;
- if (VIR_ALLOC(driverState) < 0)
+ if (VIR_ALLOC(driver) < 0)
return -1;
- if (virMutexInit(&driverState->lock) < 0) {
- VIR_FREE(driverState);
+ if (virMutexInit(&driver->lock) < 0) {
+ VIR_FREE(driver);
return -1;
}
- secretDriverLock(driverState);
+ secretDriverLock();
if (privileged) {
if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
if (!base)
goto error;
}
- if (virAsprintf(&driverState->directory, "%s/secrets", base) < 0)
+ if (virAsprintf(&driver->directory, "%s/secrets", base) < 0)
goto error;
VIR_FREE(base);
- if (loadSecrets(driverState, &driverState->secrets) < 0)
+ if (loadSecrets(&driver->secrets) < 0)
goto error;
- secretDriverUnlock(driverState);
+ secretDriverUnlock();
return 0;
error:
VIR_FREE(base);
- secretDriverUnlock(driverState);
+ secretDriverUnlock();
secretStateCleanup();
return -1;
}
{
virSecretEntryPtr new_secrets = NULL;
- if (!driverState)
+ if (!driver)
return -1;
- secretDriverLock(driverState);
+ secretDriverLock();
- if (loadSecrets(driverState, &new_secrets) < 0)
+ if (loadSecrets(&new_secrets) < 0)
goto end;
/* Keep ephemeral secrets from current state. Discard non-ephemeral secrets
that were removed by the secrets directory. */
- while (driverState->secrets != NULL) {
+ while (driver->secrets != NULL) {
virSecretEntryPtr s;
- s = listUnlink(&driverState->secrets);
+ s = listUnlink(&driver->secrets);
if (s->def->ephemeral)
listInsert(&new_secrets, s);
else
secretFree(s);
}
- driverState->secrets = new_secrets;
+ driver->secrets = new_secrets;
end:
- secretDriverUnlock(driverState);
+ secretDriverUnlock();
return 0;
}