#include "virsecret.h"
#include "storage_util.h"
#include "virutil.h"
+#include "virsecureerase.h"
#define VIR_FROM_THIS VIR_FROM_STORAGE
virStorageBackendISCSISetAuth(const char *portal,
virStoragePoolSourcePtr source)
{
- unsigned char *secret_value = NULL;
+ g_autofree unsigned char *secret_value = NULL;
size_t secret_size;
+ g_autofree char *secret_str = NULL;
virStorageAuthDefPtr authdef = source->auth;
int ret = -1;
virConnectPtr conn = NULL;
&secret_value, &secret_size) < 0)
goto cleanup;
- if (VIR_REALLOC_N(secret_value, secret_size + 1) < 0)
- goto cleanup;
-
- secret_value[secret_size] = '\0';
+ secret_str = g_new0(char, secret_size + 1);
+ memcpy(secret_str, secret_value, secret_size);
+ virSecureErase(secret_value, secret_size);
+ secret_str[secret_size] = '\0';
if (virISCSINodeUpdate(portal,
source->devices[0].path,
virISCSINodeUpdate(portal,
source->devices[0].path,
"node.session.auth.password",
- (const char *)secret_value) < 0)
+ secret_str) < 0)
goto cleanup;
ret = 0;
cleanup:
- VIR_DISPOSE_N(secret_value, secret_size);
+ virSecureErase(secret_str, secret_size);
virObjectUnref(conn);
return ret;
}
#include "virstring.h"
#include "virtime.h"
#include "viruuid.h"
+#include "virsecureerase.h"
#define VIR_FROM_THIS VIR_FROM_STORAGE
virStorageBackendISCSIDirectSetAuth(struct iscsi_context *iscsi,
virStoragePoolSourcePtr source)
{
- unsigned char *secret_value = NULL;
+ g_autofree unsigned char *secret_value = NULL;
size_t secret_size;
+ g_autofree char *secret_str = NULL;
virStorageAuthDefPtr authdef = source->auth;
int ret = -1;
virConnectPtr conn = NULL;
&secret_value, &secret_size) < 0)
goto cleanup;
- if (VIR_REALLOC_N(secret_value, secret_size + 1) < 0)
- goto cleanup;
-
- secret_value[secret_size] = '\0';
+ secret_str = g_new0(char, secret_size + 1);
+ memcpy(secret_str, secret_value, secret_size);
+ virSecureErase(secret_value, secret_size);
+ secret_str[secret_size] = '\0';
if (iscsi_set_initiator_username_pwd(iscsi,
- authdef->username,
- (const char *)secret_value) < 0) {
+ authdef->username, secret_str) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to set credential: %s"),
iscsi_get_error(iscsi));
ret = 0;
cleanup:
- VIR_DISPOSE_N(secret_value, secret_size);
+ virSecureErase(secret_str, secret_size);
virObjectUnref(conn);
return ret;
}