[libvirt] [PATCH 11/10] secret: Introduce virSecretObjDeleteConfig and virSecretObjDeleteData
Cole Robinson
crobinso at redhat.com
Mon Apr 18 22:00:19 UTC 2016
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 at 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;
>
More information about the libvir-list
mailing list