On 03/08/2016 12:35 PM, John Ferlan wrote:
Move and rename secretDeleteSaved from secret_driver into secret_conf
and
split it up into two parts since there is error path code that looks to
just delete the secret data file
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/conf/secret_conf.c | 21 +++++++++++++++++++++
src/conf/secret_conf.h | 4 ++++
src/libvirt_private.syms | 2 ++
src/secret/secret_driver.c | 22 ++++++----------------
4 files changed, 33 insertions(+), 16 deletions(-)
diff --git a/src/conf/secret_conf.c b/src/conf/secret_conf.c
index f6eee6f..52f78bd 100644
--- a/src/conf/secret_conf.c
+++ b/src/conf/secret_conf.c
@@ -685,6 +685,27 @@ virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
}
+int
+virSecretObjDeleteConfig(virSecretObjPtr secret)
+{
+ /* When the XML is missing, we'll still allow the attempt to
+ * delete the secret data. Without a configFile, the secret
+ won't be loaded again, so we have succeeded already. */
This comment seems weirdly placed now. If it's kept at all it should be placed
at the ObjDeleteData call sites. Or rework it as a comment in ObjDeleteData to
explain why we don't care about failure in this case.
+ if (!secret->def->ephemeral &&
+ unlink(secret->configFile) < 0 && errno != ENOENT)
+ return -1;
+
This should report have a virReportSystemError call. The original code doesn't
have one, but that's a bug
Minor stuff though so ACK in general, I don't care if you fix before pushing
but not sure if there's a formal policy on that
- Cole
+ return 0;
+}
+
+
+void
+virSecretObjDeleteData(virSecretObjPtr secret)
+{
+ (void)unlink(secret->base64File);
+}
+
+
void
virSecretDefFree(virSecretDefPtr def)
{
diff --git a/src/conf/secret_conf.h b/src/conf/secret_conf.h
index d3bd10c..e2f69b5 100644
--- a/src/conf/secret_conf.h
+++ b/src/conf/secret_conf.h
@@ -114,6 +114,10 @@ int virSecretObjListGetUUIDs(virSecretObjListPtr secrets,
virSecretObjListACLFilter filter,
virConnectPtr conn);
+int virSecretObjDeleteConfig(virSecretObjPtr secret);
+
+void virSecretObjDeleteData(virSecretObjPtr secret);
+
void virSecretDefFree(virSecretDefPtr def);
virSecretDefPtr virSecretDefParseString(const char *xml);
virSecretDefPtr virSecretDefParseFile(const char *filename);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index cbc36de..2437b0b 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -787,6 +787,8 @@ virSecretDefFree;
virSecretDefParseFile;
virSecretDefParseString;
virSecretLoadAllConfigs;
+virSecretObjDeleteConfig;
+virSecretObjDeleteData;
virSecretObjEndAPI;
virSecretObjListAdd;
virSecretObjListExport;
diff --git a/src/secret/secret_driver.c b/src/secret/secret_driver.c
index b8d9ecc..e4315f3 100644
--- a/src/secret/secret_driver.c
+++ b/src/secret/secret_driver.c
@@ -175,19 +175,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
@@ -325,8 +312,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;
@@ -489,10 +478,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;