]> xenbits.xensource.com Git - libvirt.git/commitdiff
secret: Introduce virSecretObj{Get|Set}Def
authorJohn Ferlan <jferlan@redhat.com>
Tue, 8 Mar 2016 00:22:04 +0000 (19:22 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 25 Apr 2016 19:45:29 +0000 (15:45 -0400)
Introduce fetch and set accessor to the secretObj->def field for usage
by the driver to avoid the driver needing to know the format of virSecretObj

src/conf/virsecretobj.c
src/conf/virsecretobj.h
src/libvirt_private.syms
src/secret/secret_driver.c

index a67ffd6bd09b711200e88e517a053ab5cec50768..8854a32234efe63b68f2ba1b37a633a3f8196a98 100644 (file)
@@ -740,6 +740,21 @@ virSecretObjSaveData(virSecretObjPtr secret)
 }
 
 
+virSecretDefPtr
+virSecretObjGetDef(virSecretObjPtr secret)
+{
+    return secret->def;
+}
+
+
+void
+virSecretObjSetDef(virSecretObjPtr secret,
+                   virSecretDefPtr def)
+{
+    secret->def = def;
+}
+
+
 static int
 virSecretLoadValidateUUID(virSecretDefPtr def,
                           const char *file)
index 176896ae2c7ce27e3bf065c18abcdeb777bdf8c3..a9b3103b7f0743cc00a467a28cc044b89d1771ae 100644 (file)
@@ -101,6 +101,10 @@ int virSecretObjSaveConfig(virSecretObjPtr secret);
 
 int virSecretObjSaveData(virSecretObjPtr secret);
 
+virSecretDefPtr virSecretObjGetDef(virSecretObjPtr secret);
+
+void virSecretObjSetDef(virSecretObjPtr secret, virSecretDefPtr def);
+
 int virSecretLoadAllConfigs(virSecretObjListPtr secrets,
                             const char *configDir);
 #endif /* __VIRSECRETOBJ_H__ */
index f03d6a91ce3799788a442de4a81893ad2974d54e..c2e20b391e32945c2dbb1638cf26cdb827ef10c4 100644 (file)
@@ -899,6 +899,7 @@ virSecretLoadAllConfigs;
 virSecretObjDeleteConfig;
 virSecretObjDeleteData;
 virSecretObjEndAPI;
+virSecretObjGetDef;
 virSecretObjListAdd;
 virSecretObjListExport;
 virSecretObjListFindByUsage;
@@ -909,6 +910,7 @@ virSecretObjListNumOfSecrets;
 virSecretObjListRemove;
 virSecretObjSaveConfig;
 virSecretObjSaveData;
+virSecretObjSetDef;
 
 
 # cpu/cpu.h
index 5657825baf83dc987e5c008531dc73f36ed028b8..61de3cbf0c890331ae5bf0cd1e9006c711bd7816 100644 (file)
@@ -153,6 +153,7 @@ secretLookupByUUID(virConnectPtr conn,
 {
     virSecretPtr ret = NULL;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     if (!(secret = virSecretObjListFindByUUID(driver->secrets, uuid))) {
         char uuidstr[VIR_UUID_STRING_BUFLEN];
@@ -162,13 +163,14 @@ secretLookupByUUID(virConnectPtr conn,
         goto cleanup;
     }
 
-    if (virSecretLookupByUUIDEnsureACL(conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretLookupByUUIDEnsureACL(conn, def) < 0)
         goto cleanup;
 
     ret = virGetSecret(conn,
-                       secret->def->uuid,
-                       secret->def->usage_type,
-                       virSecretUsageIDForDef(secret->def));
+                       def->uuid,
+                       def->usage_type,
+                       virSecretUsageIDForDef(def));
 
  cleanup:
     virSecretObjEndAPI(&secret);
@@ -183,6 +185,7 @@ secretLookupByUsage(virConnectPtr conn,
 {
     virSecretPtr ret = NULL;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     if (!(secret = virSecretObjListFindByUsage(driver->secrets,
                                                usageType, usageID))) {
@@ -191,13 +194,14 @@ secretLookupByUsage(virConnectPtr conn,
         goto cleanup;
     }
 
-    if (virSecretLookupByUsageEnsureACL(conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretLookupByUsageEnsureACL(conn, def) < 0)
         goto cleanup;
 
     ret = virGetSecret(conn,
-                       secret->def->uuid,
-                       secret->def->usage_type,
-                       virSecretUsageIDForDef(secret->def));
+                       def->uuid,
+                       def->usage_type,
+                       virSecretUsageIDForDef(def));
 
  cleanup:
     virSecretObjEndAPI(&secret);
@@ -250,22 +254,22 @@ secretDefineXML(virConnectPtr conn,
         virSecretObjDeleteData(secret);
     }
     /* Saved successfully - drop old values */
-    new_attrs = NULL;
     virSecretDefFree(backup);
 
     ret = virGetSecret(conn,
-                       secret->def->uuid,
-                       secret->def->usage_type,
-                       virSecretUsageIDForDef(secret->def));
+                       new_attrs->uuid,
+                       new_attrs->usage_type,
+                       virSecretUsageIDForDef(new_attrs));
+    new_attrs = NULL;
     goto cleanup;
 
  restore_backup:
     /* If we have a backup, then secret was defined before, so just restore
-     * the backup. The current secret->def (new_attrs) will be handled below.
+     * the backup. The current (new_attrs) will be handled below.
      * Otherwise, this is a new secret, thus remove it.
      */
     if (backup)
-        secret->def = backup;
+        virSecretObjSetDef(secret, backup);
     else
         virSecretObjListRemove(driver->secrets, secret);
 
@@ -282,16 +286,18 @@ secretGetXMLDesc(virSecretPtr obj,
 {
     char *ret = NULL;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     virCheckFlags(0, NULL);
 
     if (!(secret = secretObjFromSecret(obj)))
         goto cleanup;
 
-    if (virSecretGetXMLDescEnsureACL(obj->conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretGetXMLDescEnsureACL(obj->conn, def) < 0)
         goto cleanup;
 
-    ret = virSecretDefFormat(secret->def);
+    ret = virSecretDefFormat(def);
 
  cleanup:
     virSecretObjEndAPI(&secret);
@@ -309,6 +315,7 @@ secretSetValue(virSecretPtr obj,
     unsigned char *old_value, *new_value;
     size_t old_value_size;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     virCheckFlags(0, -1);
 
@@ -318,7 +325,8 @@ secretSetValue(virSecretPtr obj,
     if (!(secret = secretObjFromSecret(obj)))
         goto cleanup;
 
-    if (virSecretSetValueEnsureACL(obj->conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretSetValueEnsureACL(obj->conn, def) < 0)
         goto cleanup;
 
     old_value = secret->value;
@@ -327,7 +335,7 @@ secretSetValue(virSecretPtr obj,
     memcpy(new_value, value, value_size);
     secret->value = new_value;
     secret->value_size = value_size;
-    if (!secret->def->ephemeral) {
+    if (!def->ephemeral) {
         if (secretEnsureDirectory() < 0)
             goto cleanup;
 
@@ -366,13 +374,15 @@ secretGetValue(virSecretPtr obj,
 {
     unsigned char *ret = NULL;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     virCheckFlags(0, NULL);
 
     if (!(secret = secretObjFromSecret(obj)))
         goto cleanup;
 
-    if (virSecretGetValueEnsureACL(obj->conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretGetValueEnsureACL(obj->conn, def) < 0)
         goto cleanup;
 
     if (secret->value == NULL) {
@@ -384,7 +394,7 @@ secretGetValue(virSecretPtr obj,
     }
 
     if ((internalFlags & VIR_SECRET_GET_VALUE_INTERNAL_CALL) == 0 &&
-        secret->def->private) {
+        def->private) {
         virReportError(VIR_ERR_INVALID_SECRET, "%s",
                        _("secret is private"));
         goto cleanup;
@@ -406,11 +416,13 @@ secretUndefine(virSecretPtr obj)
 {
     int ret = -1;
     virSecretObjPtr secret;
+    virSecretDefPtr def;
 
     if (!(secret = secretObjFromSecret(obj)))
         goto cleanup;
 
-    if (virSecretUndefineEnsureACL(obj->conn, secret->def) < 0)
+    def = virSecretObjGetDef(secret);
+    if (virSecretUndefineEnsureACL(obj->conn, def) < 0)
         goto cleanup;
 
     if (virSecretObjDeleteConfig(secret) < 0)