]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
secret: Introduce virSecretObjDelete{Config|Data}
authorJohn Ferlan <jferlan@redhat.com>
Mon, 7 Mar 2016 23:06:57 +0000 (18:06 -0500)
committerJohn Ferlan <jferlan@redhat.com>
Mon, 25 Apr 2016 19:45:29 +0000 (15:45 -0400)
Move and rename secretDeleteSaved from secret_driver into virsecretobj and
split it up into two parts since there is error path code that looks to
just delete the secret data file

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

index e5dafa47a1ae6128fd6415f9ae6c91dc63bf244f..7ad77c741342e5cfddbf2d3a4efe8210ab8bd605 100644 (file)
@@ -648,6 +648,29 @@ virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
 }
 
 
+int
+virSecretObjDeleteConfig(virSecretObjPtr secret)
+{
+    if (!secret->def->ephemeral &&
+        unlink(secret->configFile) < 0 && errno != ENOENT) {
+        virReportSystemError(errno, _("cannot unlink '%s'"),
+                             secret->configFile);
+        return -1;
+    }
+
+    return 0;
+}
+
+
+void
+virSecretObjDeleteData(virSecretObjPtr secret)
+{
+    /* The configFile will already be removed, so secret won't be
+     * loaded again if this fails */
+    (void)unlink(secret->base64File);
+}
+
+
 static int
 virSecretLoadValidateUUID(virSecretDefPtr def,
                           const char *file)
index 2e8dcf69ebca21d6bfcabb9ee3ed38a4bfc1bc28..8f1247a1ff5d7aa27b004d22e5a7047d8dcea1df 100644 (file)
@@ -93,6 +93,10 @@ int virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
                              virSecretObjListACLFilter filter,
                              virConnectPtr conn);
 
+int virSecretObjDeleteConfig(virSecretObjPtr secret);
+
+void virSecretObjDeleteData(virSecretObjPtr secret);
+
 int virSecretLoadAllConfigs(virSecretObjListPtr secrets,
                             const char *configDir);
 #endif /* __VIRSECRETOBJ_H__ */
index 5a6265fe9638f66425b230330e23c2902c59f362..6134ac2b847ce9b012463b1ba136b741631eb574 100644 (file)
@@ -896,6 +896,8 @@ virDomainObjListRename;
 
 # conf/virsecretobj.h
 virSecretLoadAllConfigs;
+virSecretObjDeleteConfig;
+virSecretObjDeleteData;
 virSecretObjEndAPI;
 virSecretObjListAdd;
 virSecretObjListExport;
index c8b4163f9abceb5c1ffc207be0820f0cef253605..07674244485010aeb0ba1c15aec8418a6e2a8e17 100644 (file)
@@ -176,19 +176,6 @@ secretSaveValue(const virSecretObj *secret)
     return ret;
 }
 
-static int
-secretDeleteSaved(const virSecretObj *secret)
-{
-    if (unlink(secret->configFile) < 0 && errno != ENOENT)
-        return -1;
-
-    /* When the XML is missing, the rest may waste disk space, but the secret
-       won't be loaded again, so we have succeeded already. */
-    (void)unlink(secret->base64File);
-
-    return 0;
-}
-
 /* Driver functions */
 
 static int
@@ -326,8 +313,10 @@ secretDefineXML(virConnectPtr conn,
             goto restore_backup;
         }
     } else if (backup && !backup->ephemeral) {
-        if (secretDeleteSaved(secret) < 0)
+        if (virSecretObjDeleteConfig(secret) < 0)
             goto restore_backup;
+
+        virSecretObjDeleteData(secret);
     }
     /* Saved successfully - drop old values */
     new_attrs = NULL;
@@ -490,10 +479,11 @@ secretUndefine(virSecretPtr obj)
     if (virSecretUndefineEnsureACL(obj->conn, secret->def) < 0)
         goto cleanup;
 
-    if (!secret->def->ephemeral &&
-        secretDeleteSaved(secret) < 0)
+    if (virSecretObjDeleteConfig(secret) < 0)
         goto cleanup;
 
+    virSecretObjDeleteData(secret);
+
     virSecretObjListRemove(driver->secrets, secret);
 
     ret = 0;