]> xenbits.xensource.com Git - libvirt.git/commitdiff
secret: Introduce virSecretObjSave{Config|Data}
authorJohn Ferlan <jferlan@redhat.com>
Fri, 18 Mar 2016 14:17:25 +0000 (10:17 -0400)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 25 Apr 2016 19:45:29 +0000 (15:45 -0400)
Move and rename the secretRewriteFile, secretSaveDef, and secretSaveValue
from secret_driver to virsecretobj

Need to make some slight adjustments since the secretSave* functions
called secretEnsureDirectory, but otherwise mostly just a move of code.

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

index 7ad77c741342e5cfddbf2d3a4efe8210ab8bd605..a67ffd6bd09b711200e88e517a053ab5cec50768 100644 (file)
@@ -671,6 +671,75 @@ virSecretObjDeleteData(virSecretObjPtr secret)
 }
 
 
+/* Permanent secret storage */
+
+/* Secrets are stored in virSecretDriverStatePtr->configDir.  Each secret
+   has virSecretDef stored as XML in "$basename.xml".  If a value of the
+   secret is defined, it is stored as base64 (with no formatting) in
+   "$basename.base64".  "$basename" is in both cases the base64-encoded UUID. */
+
+static int
+virSecretRewriteFile(int fd,
+                     void *opaque)
+{
+    char *data = opaque;
+
+    if (safewrite(fd, data, strlen(data)) < 0)
+        return -1;
+
+    return 0;
+}
+
+
+int
+virSecretObjSaveConfig(virSecretObjPtr secret)
+{
+    char *xml = NULL;
+    int ret = -1;
+
+    if (!(xml = virSecretDefFormat(secret->def)))
+        goto cleanup;
+
+    if (virFileRewrite(secret->configFile, S_IRUSR | S_IWUSR,
+                       virSecretRewriteFile, xml) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(xml);
+    return ret;
+}
+
+
+int
+virSecretObjSaveData(virSecretObjPtr secret)
+{
+    char *base64 = NULL;
+    int ret = -1;
+
+    if (!secret->value)
+        return 0;
+
+    base64_encode_alloc((const char *)secret->value, secret->value_size,
+                        &base64);
+    if (base64 == NULL) {
+        virReportOOMError();
+        goto cleanup;
+    }
+
+    if (virFileRewrite(secret->base64File, S_IRUSR | S_IWUSR,
+                       virSecretRewriteFile, base64) < 0)
+        goto cleanup;
+
+    ret = 0;
+
+ cleanup:
+    VIR_FREE(base64);
+    return ret;
+}
+
+
 static int
 virSecretLoadValidateUUID(virSecretDefPtr def,
                           const char *file)
index 8f1247a1ff5d7aa27b004d22e5a7047d8dcea1df..176896ae2c7ce27e3bf065c18abcdeb777bdf8c3 100644 (file)
@@ -97,6 +97,10 @@ int virSecretObjDeleteConfig(virSecretObjPtr secret);
 
 void virSecretObjDeleteData(virSecretObjPtr secret);
 
+int virSecretObjSaveConfig(virSecretObjPtr secret);
+
+int virSecretObjSaveData(virSecretObjPtr secret);
+
 int virSecretLoadAllConfigs(virSecretObjListPtr secrets,
                             const char *configDir);
 #endif /* __VIRSECRETOBJ_H__ */
index 6134ac2b847ce9b012463b1ba136b741631eb574..f03d6a91ce3799788a442de4a81893ad2974d54e 100644 (file)
@@ -907,6 +907,8 @@ virSecretObjListGetUUIDs;
 virSecretObjListNew;
 virSecretObjListNumOfSecrets;
 virSecretObjListRemove;
+virSecretObjSaveConfig;
+virSecretObjSaveData;
 
 
 # cpu/cpu.h
index 07674244485010aeb0ba1c15aec8418a6e2a8e17..5657825baf83dc987e5c008531dc73f36ed028b8 100644 (file)
@@ -92,26 +92,6 @@ secretObjFromSecret(virSecretPtr secret)
 }
 
 
-/* Permament secret storage */
-
-/* Secrets are stored in virSecretDriverStatePtr->configDir.  Each secret
-   has virSecretDef stored as XML in "$basename.xml".  If a value of the
-   secret is defined, it is stored as base64 (with no formatting) in
-   "$basename.base64".  "$basename" is in both cases the base64-encoded UUID. */
-
-static int
-secretRewriteFile(int fd,
-                  void *opaque)
-{
-    char *data = opaque;
-
-    if (safewrite(fd, data, strlen(data)) < 0)
-        return -1;
-
-    return 0;
-}
-
-
 static int
 secretEnsureDirectory(void)
 {
@@ -123,59 +103,6 @@ secretEnsureDirectory(void)
     return 0;
 }
 
-static int
-secretSaveDef(const virSecretObj *secret)
-{
-    char *xml = NULL;
-    int ret = -1;
-
-    if (secretEnsureDirectory() < 0)
-        goto cleanup;
-
-    if (!(xml = virSecretDefFormat(secret->def)))
-        goto cleanup;
-
-    if (virFileRewrite(secret->configFile, S_IRUSR | S_IWUSR,
-                       secretRewriteFile, xml) < 0)
-        goto cleanup;
-
-    ret = 0;
-
- cleanup:
-    VIR_FREE(xml);
-    return ret;
-}
-
-static int
-secretSaveValue(const virSecretObj *secret)
-{
-    char *base64 = NULL;
-    int ret = -1;
-
-    if (secret->value == NULL)
-        return 0;
-
-    if (secretEnsureDirectory() < 0)
-        goto cleanup;
-
-    base64_encode_alloc((const char *)secret->value, secret->value_size,
-                        &base64);
-    if (base64 == NULL) {
-        virReportOOMError();
-        goto cleanup;
-    }
-
-    if (virFileRewrite(secret->base64File, S_IRUSR | S_IWUSR,
-                       secretRewriteFile, base64) < 0)
-        goto cleanup;
-
-    ret = 0;
-
- cleanup:
-    VIR_FREE(base64);
-    return ret;
-}
-
 /* Driver functions */
 
 static int
@@ -301,14 +228,18 @@ secretDefineXML(virConnectPtr conn,
         goto cleanup;
 
     if (!new_attrs->ephemeral) {
+        if (secretEnsureDirectory() < 0)
+            goto cleanup;
+
         if (backup && backup->ephemeral) {
-            if (secretSaveValue(secret) < 0)
+            if (virSecretObjSaveData(secret) < 0)
                 goto restore_backup;
         }
-        if (secretSaveDef(secret) < 0) {
+
+        if (virSecretObjSaveConfig(secret) < 0) {
             if (backup && backup->ephemeral) {
-                /* Undo the secretSaveValue() above; ignore errors */
-                (void)unlink(secret->base64File);
+                /* Undo the virSecretObjSaveData() above; ignore errors */
+                virSecretObjDeleteData(secret);
             }
             goto restore_backup;
         }
@@ -397,7 +328,10 @@ secretSetValue(virSecretPtr obj,
     secret->value = new_value;
     secret->value_size = value_size;
     if (!secret->def->ephemeral) {
-        if (secretSaveValue(secret) < 0)
+        if (secretEnsureDirectory() < 0)
+            goto cleanup;
+
+        if (virSecretObjSaveData(secret) < 0)
             goto restore_backup;
     }
     /* Saved successfully - drop old value */