mirror of https://gitee.com/openkylin/libvirt.git
conf: convert virSecretObj APIs to use autofree
Reviewed-by: Ján Tomko <jtomko@redhat.com> Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
667ff797e8
commit
c87cfa1310
|
@ -678,43 +678,33 @@ virSecretObjDeleteData(virSecretObjPtr obj)
|
||||||
int
|
int
|
||||||
virSecretObjSaveConfig(virSecretObjPtr obj)
|
virSecretObjSaveConfig(virSecretObjPtr obj)
|
||||||
{
|
{
|
||||||
char *xml = NULL;
|
g_autofree char *xml = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!(xml = virSecretDefFormat(obj->def)))
|
if (!(xml = virSecretDefFormat(obj->def)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virFileRewriteStr(obj->configFile, S_IRUSR | S_IWUSR, xml) < 0)
|
if (virFileRewriteStr(obj->configFile, S_IRUSR | S_IWUSR, xml) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VIR_FREE(xml);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
virSecretObjSaveData(virSecretObjPtr obj)
|
virSecretObjSaveData(virSecretObjPtr obj)
|
||||||
{
|
{
|
||||||
char *base64 = NULL;
|
g_autofree char *base64 = NULL;
|
||||||
int ret = -1;
|
|
||||||
|
|
||||||
if (!obj->value)
|
if (!obj->value)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!(base64 = virStringEncodeBase64(obj->value, obj->value_size)))
|
if (!(base64 = virStringEncodeBase64(obj->value, obj->value_size)))
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
if (virFileRewriteStr(obj->base64File, S_IRUSR | S_IWUSR, base64) < 0)
|
if (virFileRewriteStr(obj->base64File, S_IRUSR | S_IWUSR, base64) < 0)
|
||||||
goto cleanup;
|
return -1;
|
||||||
|
|
||||||
ret = 0;
|
return 0;
|
||||||
|
|
||||||
cleanup:
|
|
||||||
VIR_FREE(base64);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -762,7 +752,8 @@ virSecretObjSetValue(virSecretObjPtr obj,
|
||||||
size_t value_size)
|
size_t value_size)
|
||||||
{
|
{
|
||||||
virSecretDefPtr def = obj->def;
|
virSecretDefPtr def = obj->def;
|
||||||
unsigned char *old_value, *new_value;
|
g_autofree unsigned char *old_value = NULL;
|
||||||
|
g_autofree unsigned char *new_value = NULL;
|
||||||
size_t old_value_size;
|
size_t old_value_size;
|
||||||
|
|
||||||
if (VIR_ALLOC_N(new_value, value_size) < 0)
|
if (VIR_ALLOC_N(new_value, value_size) < 0)
|
||||||
|
@ -772,26 +763,24 @@ virSecretObjSetValue(virSecretObjPtr obj,
|
||||||
old_value_size = obj->value_size;
|
old_value_size = obj->value_size;
|
||||||
|
|
||||||
memcpy(new_value, value, value_size);
|
memcpy(new_value, value, value_size);
|
||||||
obj->value = new_value;
|
obj->value = g_steal_pointer(&new_value);
|
||||||
obj->value_size = value_size;
|
obj->value_size = value_size;
|
||||||
|
|
||||||
if (!def->isephemeral && virSecretObjSaveData(obj) < 0)
|
if (!def->isephemeral && virSecretObjSaveData(obj) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
/* Saved successfully - drop old value */
|
/* Saved successfully - drop old value */
|
||||||
if (old_value) {
|
if (old_value)
|
||||||
memset(old_value, 0, old_value_size);
|
memset(old_value, 0, old_value_size);
|
||||||
VIR_FREE(old_value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
/* Error - restore previous state and free new value */
|
/* Error - restore previous state and free new value */
|
||||||
obj->value = old_value;
|
new_value = g_steal_pointer(&obj->value);
|
||||||
|
obj->value = g_steal_pointer(&old_value);
|
||||||
obj->value_size = old_value_size;
|
obj->value_size = old_value_size;
|
||||||
memset(new_value, 0, value_size);
|
memset(new_value, 0, value_size);
|
||||||
VIR_FREE(new_value);
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -835,7 +824,8 @@ virSecretLoadValue(virSecretObjPtr obj)
|
||||||
{
|
{
|
||||||
int ret = -1, fd = -1;
|
int ret = -1, fd = -1;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
char *contents = NULL, *value = NULL;
|
g_autofree char *contents = NULL;
|
||||||
|
char *value = NULL;
|
||||||
size_t value_size;
|
size_t value_size;
|
||||||
|
|
||||||
if ((fd = open(obj->base64File, O_RDONLY)) == -1) {
|
if ((fd = open(obj->base64File, O_RDONLY)) == -1) {
|
||||||
|
@ -892,10 +882,8 @@ virSecretLoadValue(virSecretObjPtr obj)
|
||||||
memset(value, 0, value_size);
|
memset(value, 0, value_size);
|
||||||
VIR_FREE(value);
|
VIR_FREE(value);
|
||||||
}
|
}
|
||||||
if (contents != NULL) {
|
if (contents != NULL)
|
||||||
memset(contents, 0, st.st_size);
|
memset(contents, 0, st.st_size);
|
||||||
VIR_FREE(contents);
|
|
||||||
}
|
|
||||||
VIR_FORCE_CLOSE(fd);
|
VIR_FORCE_CLOSE(fd);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue