[libvirt] [PATCH 1/8] Remove use of secretPrivateData from secret driver

Daniel P. Berrange berrange at redhat.com
Tue Jan 20 16:37:08 UTC 2015


The secret driver can rely on its global state instead
of the connect private data.
---
 src/secret/secret_driver.c | 198 ++++++++++++++++++++-------------------------
 1 file changed, 89 insertions(+), 109 deletions(-)

diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c
index c7a51bb..26a23ac 100644
--- a/src/secret/secret_driver.c
+++ b/src/secret/secret_driver.c
@@ -69,16 +69,16 @@ struct _virSecretDriverState {
     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);
 }
@@ -115,7 +115,7 @@ secretFree(virSecretEntryPtr secret)
 }
 
 static virSecretEntryPtr
-secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid)
+secretFindByUUID(const unsigned char *uuid)
 {
     virSecretEntryPtr *pptr, s;
 
@@ -128,7 +128,7 @@ secretFindByUUID(virSecretDriverStatePtr driver, const unsigned char *uuid)
 }
 
 static virSecretEntryPtr
-secretFindByUsage(virSecretDriverStatePtr driver, int usageType, const char *usageID)
+secretFindByUsage(int usageType, const char *usageID)
 {
     virSecretEntryPtr *pptr, s;
 
@@ -217,8 +217,7 @@ replaceFile(const char *filename, void *data, size_t size)
 }
 
 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];
@@ -230,21 +229,19 @@ secretComputePath(virSecretDriverStatePtr driver,
 }
 
 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'"),
@@ -255,16 +252,15 @@ secretEnsureDirectory(virSecretDriverStatePtr driver)
 }
 
 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);
@@ -283,8 +279,7 @@ secretSaveDef(virSecretDriverStatePtr driver,
 }
 
 static int
-secretSaveValue(virSecretDriverStatePtr driver,
-                const virSecretEntry *secret)
+secretSaveValue(const virSecretEntry *secret)
 {
     char *filename = NULL, *base64 = NULL;
     int ret = -1;
@@ -292,10 +287,10 @@ secretSaveValue(virSecretDriverStatePtr driver,
     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,
@@ -317,16 +312,15 @@ secretSaveValue(virSecretDriverStatePtr driver,
 }
 
 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;
 
@@ -363,15 +357,14 @@ secretLoadValidateUUID(virSecretDefPtr def,
 }
 
 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;
 
@@ -431,8 +424,7 @@ secretLoadValue(virSecretDriverStatePtr driver,
 }
 
 static virSecretEntryPtr
-secretLoad(virSecretDriverStatePtr driver,
-           const char *xml_basename)
+secretLoad(const char *xml_basename)
 {
     virSecretDefPtr def = NULL;
     virSecretEntryPtr secret = NULL, ret = NULL;
@@ -454,7 +446,7 @@ secretLoad(virSecretDriverStatePtr driver,
     secret->def = def;
     def = NULL;
 
-    if (secretLoadValue(driver, secret) < 0)
+    if (secretLoadValue(secret) < 0)
         goto cleanup;
 
     ret = secret;
@@ -468,8 +460,7 @@ secretLoad(virSecretDriverStatePtr driver,
 }
 
 static int
-loadSecrets(virSecretDriverStatePtr driver,
-            virSecretEntryPtr *dest)
+loadSecrets(virSecretEntryPtr *dest)
 {
     int ret = -1;
     DIR *dir = NULL;
@@ -492,7 +483,7 @@ loadSecrets(virSecretDriverStatePtr driver,
         if (!virFileHasSuffix(de->d_name, ".xml"))
             continue;
 
-        secret = secretLoad(driver, de->d_name);
+        secret = secretLoad(de->d_name);
         if (secret == NULL) {
             virErrorPtr err = virGetLastError();
 
@@ -524,36 +515,34 @@ loadSecrets(virSecretDriverStatePtr driver,
  /* 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) {
@@ -562,14 +551,13 @@ secretConnectNumOfSecrets(virConnectPtr conn)
             i++;
     }
 
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
     return i;
 }
 
 static int
 secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
 {
-    virSecretDriverStatePtr driver = conn->secretPrivateData;
     size_t i;
     virSecretEntryPtr secret;
 
@@ -578,7 +566,7 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
     if (virConnectListSecretsEnsureACL(conn) < 0)
         return -1;
 
-    secretDriverLock(driver);
+    secretDriverLock();
 
     i = 0;
     for (secret = driver->secrets; secret != NULL; secret = secret->next) {
@@ -595,11 +583,11 @@ secretConnectListSecrets(virConnectPtr conn, char **uuids, int maxuuids)
         i++;
     }
 
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
     return i;
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     for (i = 0; i < maxuuids; i++)
         VIR_FREE(uuids[i]);
@@ -634,7 +622,6 @@ secretConnectListAllSecrets(virConnectPtr conn,
                             virSecretPtr **secrets,
                             unsigned int flags)
 {
-    virSecretDriverStatePtr driver = conn->secretPrivateData;
     virSecretPtr *tmp_secrets = NULL;
     int nsecrets = 0;
     int ret_nsecrets = 0;
@@ -648,7 +635,7 @@ secretConnectListAllSecrets(virConnectPtr conn,
     if (virConnectListAllSecretsEnsureACL(conn) < 0)
         return -1;
 
-    secretDriverLock(driver);
+    secretDriverLock();
 
     for (entry = driver->secrets; entry != NULL; entry = entry->next)
         nsecrets++;
@@ -698,7 +685,7 @@ secretConnectListAllSecrets(virConnectPtr conn,
     ret = ret_nsecrets;
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
     if (tmp_secrets) {
         for (i = 0; i < ret_nsecrets; i ++)
             virObjectUnref(tmp_secrets[i]);
@@ -713,13 +700,12 @@ secretConnectListAllSecrets(virConnectPtr conn,
 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);
@@ -737,7 +723,7 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
                        secretUsageIDForDef(secret->def));
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
     return ret;
 }
 
@@ -745,13 +731,12 @@ secretLookupByUUID(virConnectPtr conn, const unsigned char *uuid)
 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);
@@ -767,7 +752,7 @@ secretLookupByUsage(virConnectPtr conn, int usageType, const char *usageID)
                        secretUsageIDForDef(secret->def));
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
     return ret;
 }
 
@@ -776,7 +761,6 @@ static virSecretPtr
 secretDefineXML(virConnectPtr conn, const char *xml,
                 unsigned int flags)
 {
-    virSecretDriverStatePtr driver = conn->secretPrivateData;
     virSecretPtr ret = NULL;
     virSecretEntryPtr secret;
     virSecretDefPtr backup = NULL;
@@ -788,16 +772,16 @@ secretDefineXML(virConnectPtr conn, const char *xml,
     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);
@@ -838,15 +822,15 @@ secretDefineXML(virConnectPtr conn, const char *xml,
 
     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);
@@ -854,7 +838,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
             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 */
@@ -873,7 +857,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
         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
@@ -882,7 +866,7 @@ secretDefineXML(virConnectPtr conn, const char *xml,
 
  cleanup:
     virSecretDefFree(new_attrs);
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     return ret;
 }
@@ -890,15 +874,14 @@ secretDefineXML(virConnectPtr conn, const char *xml,
 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);
@@ -913,7 +896,7 @@ secretGetXMLDesc(virSecretPtr obj, unsigned int flags)
     ret = virSecretDefFormat(secret->def);
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     return ret;
 }
@@ -922,7 +905,6 @@ static int
 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;
@@ -933,9 +915,9 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
     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);
@@ -954,7 +936,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
     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 */
@@ -974,7 +956,7 @@ secretSetValue(virSecretPtr obj, const unsigned char *value,
     memset(new_value, 0, value_size);
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     VIR_FREE(new_value);
 
@@ -985,15 +967,14 @@ static unsigned char *
 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);
@@ -1026,7 +1007,7 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
     *value_size = secret->value_size;
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     return ret;
 }
@@ -1034,13 +1015,12 @@ secretGetValue(virSecretPtr obj, size_t *value_size, unsigned int flags,
 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);
@@ -1053,7 +1033,7 @@ secretUndefine(virSecretPtr obj)
         goto cleanup;
 
     if (!secret->def->ephemeral &&
-        secretDeleteSaved(driver, secret) < 0)
+        secretDeleteSaved(secret) < 0)
         goto cleanup;
 
     if (driver->secrets == secret) {
@@ -1070,7 +1050,7 @@ secretUndefine(virSecretPtr obj)
     ret = 0;
 
  cleanup:
-    secretDriverUnlock(driver);
+    secretDriverUnlock();
 
     return ret;
 }
@@ -1078,22 +1058,22 @@ secretUndefine(virSecretPtr obj)
 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;
 }
@@ -1105,14 +1085,14 @@ secretStateInitialize(bool privileged,
 {
     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)
@@ -1122,19 +1102,19 @@ secretStateInitialize(bool privileged,
         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;
 }
@@ -1144,29 +1124,29 @@ secretStateReload(void)
 {
     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;
 }
 
-- 
2.1.0




More information about the libvir-list mailing list