mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 21:55:25 +00:00
storageBackendCreateQemuImgSecretPath: Refactor cleanup
Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
c655601d69
commit
bb3b309386
@ -1259,10 +1259,10 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
|
||||
virStorageVolDef *vol)
|
||||
{
|
||||
virStorageEncryption *enc = vol->target.encryption;
|
||||
char *secretPath = NULL;
|
||||
uint8_t *secret = NULL;
|
||||
g_autofree char *secretPath = NULL;
|
||||
g_autofree uint8_t *secret = NULL;
|
||||
size_t secretlen = 0;
|
||||
virConnectPtr conn = NULL;
|
||||
g_autoptr(virConnect) conn = NULL;
|
||||
VIR_AUTOCLOSE fd = -1;
|
||||
VIR_IDENTITY_AUTORESTORE virIdentity *oldident = NULL;
|
||||
|
||||
@ -1287,24 +1287,29 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
|
||||
return NULL;
|
||||
|
||||
if (!(secretPath = virStoragePoolObjBuildTempFilePath(pool, vol)))
|
||||
goto cleanup;
|
||||
return NULL;
|
||||
|
||||
if ((fd = g_mkstemp_full(secretPath, O_RDWR | O_CLOEXEC, S_IRUSR | S_IWUSR)) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
_("failed to open secret file for write"));
|
||||
goto error;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (virSecretGetSecretString(conn, &enc->secrets[0]->seclookupdef,
|
||||
VIR_SECRET_USAGE_TYPE_VOLUME,
|
||||
&secret, &secretlen) < 0)
|
||||
goto error;
|
||||
&secret, &secretlen) < 0) {
|
||||
unlink(secretPath);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (safewrite(fd, secret, secretlen) < 0) {
|
||||
virSecureErase(secret, secretlen);
|
||||
virReportSystemError(errno, "%s",
|
||||
_("failed to write secret file"));
|
||||
goto error;
|
||||
unlink(secretPath);
|
||||
return NULL;
|
||||
}
|
||||
virSecureErase(secret, secretlen);
|
||||
|
||||
if ((vol->target.perms->uid != (uid_t)-1) &&
|
||||
(vol->target.perms->gid != (gid_t)-1)) {
|
||||
@ -1312,21 +1317,12 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObj *pool,
|
||||
vol->target.perms->gid) < 0) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("failed to chown secret file"));
|
||||
goto error;
|
||||
}
|
||||
}
|
||||
|
||||
cleanup:
|
||||
virObjectUnref(conn);
|
||||
virSecureErase(secret, secretlen);
|
||||
g_free(secret);
|
||||
|
||||
return secretPath;
|
||||
|
||||
error:
|
||||
unlink(secretPath);
|
||||
VIR_FREE(secretPath);
|
||||
goto cleanup;
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return g_steal_pointer(&secretPath);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user