On Sat, Apr 16, 2016 at 10:17:34AM -0400, John Ferlan wrote:
Introduce a new private structure to hold qemu domain auth/secret
data.
This will be stored in the qemuDomainDiskPrivate as a means to store the
auth and fetched secret data rather than generating during building of
the command line.
The initial changes will handle the current username and secret values
for rbd and iscsi disks (in their various forms). The rbd secret is
stored as a base64 encoded value, while the iscsi secret is stored as
a plain text value. Future changes will store encoded/encrypted secret
data as well as an initialization vector needed to be given to qemu
in order to decrypt the encoded password along with the domain masterKey.
The inital assumption will be that VIR_DOMAIN_SECRET_INFO_PLAIN is
being used.
Although it's expected that the cleanup of the secret data will be
done immediately after command line generation, reintroduce the object
dispose function qemuDomainDiskPrivateDispose to handle removing
memory associated with the structure for "normal" cleanup paths.
Signed-off-by: John Ferlan <jferlan(a)redhat.com>
---
src/qemu/qemu_domain.c | 32 +++++++++++++++++++++++++++++++-
src/qemu/qemu_domain.h | 27 +++++++++++++++++++++++++++
2 files changed, 58 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 7d2c4fd..9cfe3e4 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -239,6 +239,29 @@ struct _qemuDomainObjPrivate {
size_t masterKeyLen;
};
+/* Type of domain secret */
+typedef enum {
+ VIR_DOMAIN_SECRET_INFO_PLAIN = 0,
+
+ VIR_DOMAIN_SECRET_INFO_LAST
+} qemuDomainSecretInfoType;
Just a nit: the enum name has 'Type' in it, but the enum values do not.
+
+typedef struct _qemuDomainSecretPlain qemuDomainSecretPlain;
+typedef struct _qemuDomainSecretPlain *qemuDomainSecretPlainPtr;
+struct _qemuDomainSecretPlain {
+ char *username;
+ char *secret;
+};
+
+typedef struct _qemuDomainSecretInfo qemuDomainSecretInfo;
+typedef qemuDomainSecretInfo *qemuDomainSecretInfoPtr;
+struct _qemuDomainSecretInfo {
+ int type; /* qemuDomainSecretInfoType */
Is there any issue with using:
qemuDomainSecretInfoType type;
As far as I know we cannot use enums in public structures because their
size varies per-platform/compiler, but they should be safe in internal
code.
Jan
+ union {
+ qemuDomainSecretPlain plain;
+ } s;
+};
+