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

Remove use of secretPrivateData from secret driver

The secret driver can rely on its global state instead
of the connect private data.
This commit is contained in:
Daniel P. Berrange 2014-11-07 11:28:58 +01:00
parent d13f56f08a
commit 04101f23d0

View File

@ -69,16 +69,16 @@ struct _virSecretDriverState {
char *directory; char *directory;
}; };
static virSecretDriverStatePtr driverState; static virSecretDriverStatePtr driver;
static void static void
secretDriverLock(virSecretDriverStatePtr driver) secretDriverLock(void)
{ {
virMutexLock(&driver->lock); virMutexLock(&driver->lock);
} }
static void static void
secretDriverUnlock(virSecretDriverStatePtr driver) secretDriverUnlock(void)
{ {
virMutexUnlock(&driver->lock); virMutexUnlock(&driver->lock);
} }
@ -115,7 +115,7 @@ secretFree(virSecretEntryPtr secret)
} }
static virSecretEntryPtr static virSecretEntryPtr
secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid) secretFindByUUID(const unsigned char *uuid)
{ {
virSecretEntryPtr *pptr, s; virSecretEntryPtr *pptr, s;
@ -128,7 +128,7 @@ secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid)
} }
static virSecretEntryPtr static virSecretEntryPtr
secretFindByUsage(virSecretDriverStatePtr driver, int usageType, const char *usageID) secretFindByUsage(int usageType, const char *usageID)
{ {
virSecretEntryPtr *pptr, s; virSecretEntryPtr *pptr, s;
@ -217,8 +217,7 @@ replaceFile(const char *filename, void *data, size_t size)
} }
static char * static char *
secretComputePath(virSecretDriverStatePtr driver, secretComputePath(const virSecretEntry *secret, const char *suffix)
const virSecretEntry *secret, const char *suffix)
{ {
char *ret; char *ret;
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
@ -230,21 +229,19 @@ secretComputePath(virSecretDriverStatePtr driver,
} }
static char * static char *
secretXMLPath(virSecretDriverStatePtr driver, secretXMLPath(const virSecretEntry *secret)
const virSecretEntry *secret)
{ {
return secretComputePath(driver, secret, ".xml"); return secretComputePath(secret, ".xml");
} }
static char * static char *
secretBase64Path(virSecretDriverStatePtr driver, secretBase64Path(const virSecretEntry *secret)
const virSecretEntry *secret)
{ {
return secretComputePath(driver, secret, ".base64"); return secretComputePath(secret, ".base64");
} }
static int static int
secretEnsureDirectory(virSecretDriverStatePtr driver) secretEnsureDirectory(void)
{ {
if (mkdir(driver->directory, S_IRWXU) < 0 && errno != EEXIST) { if (mkdir(driver->directory, S_IRWXU) < 0 && errno != EEXIST) {
virReportSystemError(errno, _("cannot create '%s'"), virReportSystemError(errno, _("cannot create '%s'"),
@ -255,16 +252,15 @@ secretEnsureDirectory(virSecretDriverStatePtr driver)
} }
static int static int
secretSaveDef(virSecretDriverStatePtr driver, secretSaveDef(const virSecretEntry *secret)
const virSecretEntry *secret)
{ {
char *filename = NULL, *xml = NULL; char *filename = NULL, *xml = NULL;
int ret = -1; int ret = -1;
if (secretEnsureDirectory(driver) < 0) if (secretEnsureDirectory() < 0)
goto cleanup; goto cleanup;
filename = secretXMLPath(driver, secret); filename = secretXMLPath(secret);
if (filename == NULL) if (filename == NULL)
goto cleanup; goto cleanup;
xml = virSecretDefFormat(secret->def); xml = virSecretDefFormat(secret->def);
@ -283,8 +279,7 @@ secretSaveDef(virSecretDriverStatePtr driver,
} }
static int static int
secretSaveValue(virSecretDriverStatePtr driver, secretSaveValue(const virSecretEntry *secret)
const virSecretEntry *secret)
{ {
char *filename = NULL, *base64 = NULL; char *filename = NULL, *base64 = NULL;
int ret = -1; int ret = -1;
@ -292,10 +287,10 @@ secretSaveValue(virSecretDriverStatePtr driver,
if (secret->value == NULL) if (secret->value == NULL)
return 0; return 0;
if (secretEnsureDirectory(driver) < 0) if (secretEnsureDirectory() < 0)
goto cleanup; goto cleanup;
filename = secretBase64Path(driver, secret); filename = secretBase64Path(secret);
if (filename == NULL) if (filename == NULL)
goto cleanup; goto cleanup;
base64_encode_alloc((const char *)secret->value, secret->value_size, base64_encode_alloc((const char *)secret->value, secret->value_size,
@ -317,16 +312,15 @@ secretSaveValue(virSecretDriverStatePtr driver,
} }
static int static int
secretDeleteSaved(virSecretDriverStatePtr driver, secretDeleteSaved(const virSecretEntry *secret)
const virSecretEntry *secret)
{ {
char *xml_filename = NULL, *value_filename = NULL; char *xml_filename = NULL, *value_filename = NULL;
int ret = -1; int ret = -1;
xml_filename = secretXMLPath(driver, secret); xml_filename = secretXMLPath(secret);
if (xml_filename == NULL) if (xml_filename == NULL)
goto cleanup; goto cleanup;
value_filename = secretBase64Path(driver, secret); value_filename = secretBase64Path(secret);
if (value_filename == NULL) if (value_filename == NULL)
goto cleanup; goto cleanup;
@ -363,15 +357,14 @@ secretLoadValidateUUID(virSecretDefPtr def,
} }
static int static int
secretLoadValue(virSecretDriverStatePtr driver, secretLoadValue(virSecretEntryPtr secret)
virSecretEntryPtr secret)
{ {
int ret = -1, fd = -1; int ret = -1, fd = -1;
struct stat st; struct stat st;
char *filename = NULL, *contents = NULL, *value = NULL; char *filename = NULL, *contents = NULL, *value = NULL;
size_t value_size; size_t value_size;
filename = secretBase64Path(driver, secret); filename = secretBase64Path(secret);
if (filename == NULL) if (filename == NULL)
goto cleanup; goto cleanup;
@ -431,8 +424,7 @@ secretLoadValue(virSecretDriverStatePtr driver,
} }
static virSecretEntryPtr static virSecretEntryPtr
secretLoad(virSecretDriverStatePtr driver, secretLoad(const char *xml_basename)
const char *xml_basename)
{ {
virSecretDefPtr def = NULL; virSecretDefPtr def = NULL;
virSecretEntryPtr secret = NULL, ret = NULL; virSecretEntryPtr secret = NULL, ret = NULL;
@ -454,7 +446,7 @@ secretLoad(virSecretDriverStatePtr driver,
secret->def = def; secret->def = def;
def = NULL; def = NULL;
if (secretLoadValue(driver, secret) < 0) if (secretLoadValue(secret) < 0)
goto cleanup; goto cleanup;
ret = secret; ret = secret;
@ -468,8 +460,7 @@ secretLoad(virSecretDriverStatePtr driver,
} }
static int static int
loadSecrets(virSecretDriverStatePtr driver, loadSecrets(virSecretEntryPtr *dest)
virSecretEntryPtr *dest)
{ {
int ret = -1; int ret = -1;
DIR *dir = NULL; DIR *dir = NULL;
@ -492,7 +483,7 @@ loadSecrets(virSecretDriverStatePtr driver,
if (!virFileHasSuffix(de->d_name, ".xml")) if (!virFileHasSuffix(de->d_name, ".xml"))
continue; continue;
secret = secretLoad(driver, de->d_name); secret = secretLoad(de->d_name);
if (secret == NULL) { if (secret == NULL) {
virErrorPtr err = virGetLastError(); virErrorPtr err = virGetLastError();
@ -524,36 +515,34 @@ loadSecrets(virSecretDriverStatePtr driver,
/* Driver functions */ /* Driver functions */
static virDrvOpenStatus static virDrvOpenStatus
secretOpen(virConnectPtr conn, virConnectAuthPtr auth ATTRIBUTE_UNUSED, secretOpen(virConnectPtr conn ATTRIBUTE_UNUSED,
virConnectAuthPtr auth ATTRIBUTE_UNUSED,
unsigned int flags) unsigned int flags)
{ {
virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR); virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
if (driverState == NULL) if (driver == NULL)
return VIR_DRV_OPEN_DECLINED; return VIR_DRV_OPEN_DECLINED;
conn->secretPrivateData = driverState;
return VIR_DRV_OPEN_SUCCESS; return VIR_DRV_OPEN_SUCCESS;
} }
static int static int
secretClose(virConnectPtr conn) secretClose(virConnectPtr conn ATTRIBUTE_UNUSED)
{ {
conn->secretPrivateData = NULL;
return 0; return 0;
} }
static int static int
secretConnectNumOfSecrets(virConnectPtr conn) secretConnectNumOfSecrets(virConnectPtr conn)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
size_t i; size_t i;
virSecretEntryPtr secret; virSecretEntryPtr secret;
if (virConnectNumOfSecretsEnsureACL(conn) < 0) if (virConnectNumOfSecretsEnsureACL(conn) < 0)
return -1; return -1;
secretDriverLock(driver); secretDriverLock();
i = 0; i = 0;
for (secret = driver->secrets; secret != NULL; secret = secret->next) { for (secret = driver->secrets; secret != NULL; secret = secret->next) {
@ -562,14 +551,13 @@ secretConnectNumOfSecrets(virConnectPtr conn)
i++; i++;
} }
secretDriverUnlock(driver); secretDriverUnlock();
return i; return i;
} }
static int static int
secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids) secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
size_t i; size_t i;
virSecretEntryPtr secret; virSecretEntryPtr secret;
@ -578,7 +566,7 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
if (virConnectListSecretsEnsureACL(conn) < 0) if (virConnectListSecretsEnsureACL(conn) < 0)
return -1; return -1;
secretDriverLock(driver); secretDriverLock();
i = 0; i = 0;
for (secret = driver->secrets; secret != NULL; secret = secret->next) { for (secret = driver->secrets; secret != NULL; secret = secret->next) {
@ -595,11 +583,11 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
i++; i++;
} }
secretDriverUnlock(driver); secretDriverUnlock();
return i; return i;
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
for (i = 0; i < maxuuids; i++) for (i = 0; i < maxuuids; i++)
VIR_FREE(uuids[i]); VIR_FREE(uuids[i]);
@ -634,7 +622,6 @@ secretConnectListAllSecrets(virConnectPtr conn,
virSecretPtr **secrets, virSecretPtr **secrets,
unsigned int flags) unsigned int flags)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr *tmp_secrets = NULL; virSecretPtr *tmp_secrets = NULL;
int nsecrets = 0; int nsecrets = 0;
int ret_nsecrets = 0; int ret_nsecrets = 0;
@ -648,7 +635,7 @@ secretConnectListAllSecrets(virConnectPtr conn,
if (virConnectListAllSecretsEnsureACL(conn) < 0) if (virConnectListAllSecretsEnsureACL(conn) < 0)
return -1; return -1;
secretDriverLock(driver); secretDriverLock();
for (entry = driver->secrets; entry != NULL; entry = entry->next) for (entry = driver->secrets; entry != NULL; entry = entry->next)
nsecrets++; nsecrets++;
@ -698,7 +685,7 @@ secretConnectListAllSecrets(virConnectPtr conn,
ret = ret_nsecrets; ret = ret_nsecrets;
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
if (tmp_secrets) { if (tmp_secrets) {
for (i = 0; i < ret_nsecrets; i ++) for (i = 0; i < ret_nsecrets; i ++)
virObjectUnref(tmp_secrets[i]); virObjectUnref(tmp_secrets[i]);
@ -713,13 +700,12 @@ secretConnectListAllSecrets(virConnectPtr conn,
static virSecretPtr static virSecretPtr
secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid) secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL; virSecretPtr ret = NULL;
virSecretEntryPtr secret; virSecretEntryPtr secret;
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUUID(driver, uuid); secret = secretFindByUUID(uuid);
if (secret == NULL) { if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(uuid, uuidstr); virUUIDFormat(uuid, uuidstr);
@ -737,7 +723,7 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
secretUsageIDForDef(secret->def)); secretUsageIDForDef(secret->def));
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -745,13 +731,12 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
static virSecretPtr static virSecretPtr
secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID) secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL; virSecretPtr ret = NULL;
virSecretEntryPtr secret; virSecretEntryPtr secret;
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUsage(driver, usageType, usageID); secret = secretFindByUsage(usageType, usageID);
if (secret == NULL) { if (secret == NULL) {
virReportError(VIR_ERR_NO_SECRET, virReportError(VIR_ERR_NO_SECRET,
_("no secret with matching usage '%s'"), usageID); _("no secret with matching usage '%s'"), usageID);
@ -767,7 +752,7 @@ secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
secretUsageIDForDef(secret->def)); secretUsageIDForDef(secret->def));
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -776,7 +761,6 @@ static virSecretPtr
secretDefineXML(virConnectPtr conn, const char *xml, secretDefineXML(virConnectPtr conn, const char *xml,
unsigned int flags) unsigned int flags)
{ {
virSecretDriverStatePtr driver = conn->secretPrivateData;
virSecretPtr ret = NULL; virSecretPtr ret = NULL;
virSecretEntryPtr secret; virSecretEntryPtr secret;
virSecretDefPtr backup = NULL; virSecretDefPtr backup = NULL;
@ -788,16 +772,16 @@ secretDefineXML(virConnectPtr conn, const char *xml,
if (new_attrs == NULL) if (new_attrs == NULL)
return NULL; return NULL;
secretDriverLock(driver); secretDriverLock();
if (virSecretDefineXMLEnsureACL(conn, new_attrs) < 0) if (virSecretDefineXMLEnsureACL(conn, new_attrs) < 0)
goto cleanup; goto cleanup;
secret = secretFindByUUID(driver, new_attrs->uuid); secret = secretFindByUUID(new_attrs->uuid);
if (secret == NULL) { if (secret == NULL) {
/* No existing secret with same UUID, try look for matching usage instead */ /* No existing secret with same UUID, try look for matching usage instead */
const char *usageID = secretUsageIDForDef(new_attrs); const char *usageID = secretUsageIDForDef(new_attrs);
secret = secretFindByUsage(driver, new_attrs->usage_type, usageID); secret = secretFindByUsage(new_attrs->usage_type, usageID);
if (secret) { if (secret) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(secret->def->uuid, uuidstr); virUUIDFormat(secret->def->uuid, uuidstr);
@ -838,15 +822,15 @@ secretDefineXML(virConnectPtr conn, const char *xml,
if (!new_attrs->ephemeral) { if (!new_attrs->ephemeral) {
if (backup && backup->ephemeral) { if (backup && backup->ephemeral) {
if (secretSaveValue(driver, secret) < 0) if (secretSaveValue(secret) < 0)
goto restore_backup; goto restore_backup;
} }
if (secretSaveDef(driver, secret) < 0) { if (secretSaveDef(secret) < 0) {
if (backup && backup->ephemeral) { if (backup && backup->ephemeral) {
char *filename; char *filename;
/* Undo the secretSaveValue() above; ignore errors */ /* Undo the secretSaveValue() above; ignore errors */
filename = secretBase64Path(driver, secret); filename = secretBase64Path(secret);
if (filename != NULL) if (filename != NULL)
(void)unlink(filename); (void)unlink(filename);
VIR_FREE(filename); VIR_FREE(filename);
@ -854,7 +838,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
goto restore_backup; goto restore_backup;
} }
} else if (backup && !backup->ephemeral) { } else if (backup && !backup->ephemeral) {
if (secretDeleteSaved(driver, secret) < 0) if (secretDeleteSaved(secret) < 0)
goto restore_backup; goto restore_backup;
} }
/* Saved successfully - drop old values */ /* Saved successfully - drop old values */
@ -873,7 +857,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
secret->def = backup; secret->def = backup;
} else { } else {
/* "secret" was added to the head of the list above */ /* "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", virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("list of secrets is inconsistent")); _("list of secrets is inconsistent"));
else else
@ -882,7 +866,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
cleanup: cleanup:
virSecretDefFree(new_attrs); virSecretDefFree(new_attrs);
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -890,15 +874,14 @@ secretDefineXML(virConnectPtr conn, const char *xml,
static char * static char *
secretGetXMLDesc(virSecretPtr obj, unsigned int flags) secretGetXMLDesc(virSecretPtr obj, unsigned int flags)
{ {
virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
char *ret = NULL; char *ret = NULL;
virSecretEntryPtr secret; virSecretEntryPtr secret;
virCheckFlags(0, NULL); virCheckFlags(0, NULL);
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUUID(driver, obj->uuid); secret = secretFindByUUID(obj->uuid);
if (secret == NULL) { if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr); virUUIDFormat(obj->uuid, uuidstr);
@ -913,7 +896,7 @@ secretGetXMLDesc(virSecretPtr obj, unsigned int flags)
ret = virSecretDefFormat(secret->def); ret = virSecretDefFormat(secret->def);
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -922,7 +905,6 @@ static int
secretSetValue(virSecretPtr obj, const unsigned char *value, secretSetValue(virSecretPtr obj, const unsigned char *value,
size_t value_size, unsigned int flags) size_t value_size, unsigned int flags)
{ {
virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
int ret = -1; int ret = -1;
unsigned char *old_value, *new_value; unsigned char *old_value, *new_value;
size_t old_value_size; size_t old_value_size;
@ -933,9 +915,9 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
if (VIR_ALLOC_N(new_value, value_size) < 0) if (VIR_ALLOC_N(new_value, value_size) < 0)
return -1; return -1;
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUUID(driver, obj->uuid); secret = secretFindByUUID(obj->uuid);
if (secret == NULL) { if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr); virUUIDFormat(obj->uuid, uuidstr);
@ -954,7 +936,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
secret->value = new_value; secret->value = new_value;
secret->value_size = value_size; secret->value_size = value_size;
if (!secret->def->ephemeral) { if (!secret->def->ephemeral) {
if (secretSaveValue(driver, secret) < 0) if (secretSaveValue(secret) < 0)
goto restore_backup; goto restore_backup;
} }
/* Saved successfully - drop old value */ /* Saved successfully - drop old value */
@ -974,7 +956,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
memset(new_value, 0, value_size); memset(new_value, 0, value_size);
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
VIR_FREE(new_value); VIR_FREE(new_value);
@ -985,15 +967,14 @@ static unsigned char *
secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags, secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
unsigned int internalFlags) unsigned int internalFlags)
{ {
virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
unsigned char *ret = NULL; unsigned char *ret = NULL;
virSecretEntryPtr secret; virSecretEntryPtr secret;
virCheckFlags(0, NULL); virCheckFlags(0, NULL);
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUUID(driver, obj->uuid); secret = secretFindByUUID(obj->uuid);
if (secret == NULL) { if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr); virUUIDFormat(obj->uuid, uuidstr);
@ -1026,7 +1007,7 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
*value_size = secret->value_size; *value_size = secret->value_size;
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -1034,13 +1015,12 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
static int static int
secretUndefine(virSecretPtr obj) secretUndefine(virSecretPtr obj)
{ {
virSecretDriverStatePtr driver = obj->conn->secretPrivateData;
int ret = -1; int ret = -1;
virSecretEntryPtr secret; virSecretEntryPtr secret;
secretDriverLock(driver); secretDriverLock();
secret = secretFindByUUID(driver, obj->uuid); secret = secretFindByUUID(obj->uuid);
if (secret == NULL) { if (secret == NULL) {
char uuidstr[VIR_UUID_STRING_BUFLEN]; char uuidstr[VIR_UUID_STRING_BUFLEN];
virUUIDFormat(obj->uuid, uuidstr); virUUIDFormat(obj->uuid, uuidstr);
@ -1053,7 +1033,7 @@ secretUndefine(virSecretPtr obj)
goto cleanup; goto cleanup;
if (!secret->def->ephemeral && if (!secret->def->ephemeral &&
secretDeleteSaved(driver, secret) < 0) secretDeleteSaved(secret) < 0)
goto cleanup; goto cleanup;
if (driver->secrets == secret) { if (driver->secrets == secret) {
@ -1070,7 +1050,7 @@ secretUndefine(virSecretPtr obj)
ret = 0; ret = 0;
cleanup: cleanup:
secretDriverUnlock(driver); secretDriverUnlock();
return ret; return ret;
} }
@ -1078,22 +1058,22 @@ secretUndefine(virSecretPtr obj)
static int static int
secretStateCleanup(void) secretStateCleanup(void)
{ {
if (driverState == NULL) if (driver == NULL)
return -1; return -1;
secretDriverLock(driverState); secretDriverLock();
while (driverState->secrets != NULL) { while (driver->secrets != NULL) {
virSecretEntryPtr s; virSecretEntryPtr s;
s = listUnlink(&driverState->secrets); s = listUnlink(&driver->secrets);
secretFree(s); secretFree(s);
} }
VIR_FREE(driverState->directory); VIR_FREE(driver->directory);
secretDriverUnlock(driverState); secretDriverUnlock();
virMutexDestroy(&driverState->lock); virMutexDestroy(&driver->lock);
VIR_FREE(driverState); VIR_FREE(driver);
return 0; return 0;
} }
@ -1105,14 +1085,14 @@ secretStateInitialize(bool privileged,
{ {
char *base = NULL; char *base = NULL;
if (VIR_ALLOC(driverState) < 0) if (VIR_ALLOC(driver) < 0)
return -1; return -1;
if (virMutexInit(&driverState->lock) < 0) { if (virMutexInit(&driver->lock) < 0) {
VIR_FREE(driverState); VIR_FREE(driver);
return -1; return -1;
} }
secretDriverLock(driverState); secretDriverLock();
if (privileged) { if (privileged) {
if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0) if (VIR_STRDUP(base, SYSCONFDIR "/libvirt") < 0)
@ -1122,19 +1102,19 @@ secretStateInitialize(bool privileged,
if (!base) if (!base)
goto error; goto error;
} }
if (virAsprintf(&driverState->directory, "%s/secrets", base) < 0) if (virAsprintf(&driver->directory, "%s/secrets", base) < 0)
goto error; goto error;
VIR_FREE(base); VIR_FREE(base);
if (loadSecrets(driverState, &driverState->secrets) < 0) if (loadSecrets(&driver->secrets) < 0)
goto error; goto error;
secretDriverUnlock(driverState); secretDriverUnlock();
return 0; return 0;
error: error:
VIR_FREE(base); VIR_FREE(base);
secretDriverUnlock(driverState); secretDriverUnlock();
secretStateCleanup(); secretStateCleanup();
return -1; return -1;
} }
@ -1144,29 +1124,29 @@ secretStateReload(void)
{ {
virSecretEntryPtr new_secrets = NULL; virSecretEntryPtr new_secrets = NULL;
if (!driverState) if (!driver)
return -1; return -1;
secretDriverLock(driverState); secretDriverLock();
if (loadSecrets(driverState, &new_secrets) < 0) if (loadSecrets(&new_secrets) < 0)
goto end; goto end;
/* Keep ephemeral secrets from current state. Discard non-ephemeral secrets /* Keep ephemeral secrets from current state. Discard non-ephemeral secrets
that were removed by the secrets directory. */ that were removed by the secrets directory. */
while (driverState->secrets != NULL) { while (driver->secrets != NULL) {
virSecretEntryPtr s; virSecretEntryPtr s;
s = listUnlink(&driverState->secrets); s = listUnlink(&driver->secrets);
if (s->def->ephemeral) if (s->def->ephemeral)
listInsert(&new_secrets, s); listInsert(&new_secrets, s);
else else
secretFree(s); secretFree(s);
} }
driverState->secrets = new_secrets; driver->secrets = new_secrets;
end: end:
secretDriverUnlock(driverState); secretDriverUnlock();
return 0; return 0;
} }