On 05/02/2016 07:17 AM, Ján Tomko wrote:
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.
Nor does qemuProcessEventType in qemu_domain.h
Nor does qemuMonitorJSONObjectPropertyType in qemu_monitor_json.h
But I can make the change to VIR_DOMAIN_SECRET_INFO_TYPE_{PLAIN|IV|LAST}
> +
> +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.
OK - I'll make these adjustments and send it along as the 1st patch of
the follow-up series.
John