From fa9ca7fd3c19e4e321ca73849ccdabda1b6ab2ee Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Wed, 24 Feb 2016 10:52:30 -0500 Subject: [PATCH] secret: Introduce secretAssignDef This new API will allocate the secret, assign the def pointer, and insert the secret onto the passed list. Whether that's the temporary list in loadSecrets which gets loaded into the driver list or driver list during secretDefineXML. Signed-off-by: John Ferlan --- src/secret/secret_driver.c | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c index dd8062f6e3..0b374c16b0 100644 --- a/src/secret/secret_driver.c +++ b/src/secret/secret_driver.c @@ -168,6 +168,22 @@ secretFindByUsage(int usageType, return NULL; } + +static virSecretObjPtr +secretAssignDef(virSecretObjPtr *list, + virSecretDefPtr def) +{ + virSecretObjPtr secret; + + if (VIR_ALLOC(secret) < 0) + return NULL; + + listInsert(list, secret); + secret->def = def; + + return secret; +} + /* Permament secret storage */ /* Secrets are stored in virSecretDriverStatePtr->configDir. Each secret @@ -374,7 +390,8 @@ listUnlinkSecret(virSecretObjPtr *pptr, static virSecretObjPtr -secretLoad(const char *file, +secretLoad(virSecretObjPtr *list, + const char *file, const char *path, const char *base64path) { @@ -387,9 +404,8 @@ secretLoad(const char *file, if (secretLoadValidateUUID(def, file) < 0) goto cleanup; - if (VIR_ALLOC(secret) < 0) + if (!(secret = secretAssignDef(list, def))) goto cleanup; - secret->def = def; def = NULL; if (VIR_STRDUP(secret->configFile, path) < 0) @@ -405,6 +421,7 @@ secretLoad(const char *file, secret = NULL; cleanup: + listUnlinkSecret(list, secret); secretFree(secret); virSecretDefFree(def); return ret; @@ -449,7 +466,7 @@ loadSecrets(virSecretObjPtr *dest) } VIR_FREE(base64name); - if (!(secret = secretLoad(de->d_name, path, base64path))) { + if (!(secret = secretLoad(&list, de->d_name, path, base64path))) { virErrorPtr err = virGetLastError(); VIR_ERROR(_("Error reading secret: %s"), @@ -462,7 +479,6 @@ loadSecrets(virSecretObjPtr *dest) VIR_FREE(path); VIR_FREE(base64path); - listInsert(&list, secret); } /* Ignore error reported by readdir, if any. It's better to keep the secrets we managed to find. */ @@ -712,7 +728,7 @@ secretDefineXML(virConnectPtr conn, unsigned int flags) { virSecretPtr ret = NULL; - virSecretObjPtr secret; + virSecretObjPtr secret = NULL; virSecretDefPtr backup = NULL; virSecretDefPtr new_attrs; @@ -742,7 +758,7 @@ secretDefineXML(virConnectPtr conn, } /* No existing secret at all, create one */ - if (VIR_ALLOC(secret) < 0) + if (!(secret = secretAssignDef(&driver->secrets, new_attrs))) goto cleanup; virUUIDFormat(secret->def->uuid, uuidstr); @@ -761,9 +777,6 @@ secretDefineXML(virConnectPtr conn, secretFree(secret); goto cleanup; } - - listInsert(&driver->secrets, secret); - secret->def = new_attrs; } else { const char *newUsageID = secretUsageIDForDef(new_attrs); const char *oldUsageID = secretUsageIDForDef(secret->def); -- 2.39.5