[libvirt] [PATCH 1/4] Fix UUID handling in secrets/storage encryption APIs
Daniel P. Berrange
berrange at redhat.com
Fri Sep 11 17:26:16 UTC 2009
On Fri, Sep 11, 2009 at 06:00:07PM +0200, Daniel Veillard wrote:
> On Fri, Sep 11, 2009 at 03:19:17PM +0100, Daniel P. Berrange wrote:
> > Convert all the secret/storage encryption APIs / wire format to
> > handle UUIDs in raw format instead of non-canonical printable
> > format. Guarentees data format correctness.
>
> > + *
> > + * Returns a new secret object or NULL in case of failure. If the
> > + * secret cannot be found, then VIR_ERR_NO_SECRET error is raised.
> > + */
> > +virSecretPtr
> > +virSecretLookupByUUIDString(virConnectPtr conn, const char *uuidstr)
> > +{
> > + int raw[VIR_UUID_BUFLEN], i;
> > + unsigned char uuid[VIR_UUID_BUFLEN];
> > + int ret;
> > +
> > + DEBUG("conn=%p, uuidstr=%s", conn, uuidstr);
> > +
> > + virResetLastError();
> > +
> > + if (!VIR_IS_CONNECT(conn)) {
> > + virLibConnError(NULL, VIR_ERR_INVALID_CONN, __FUNCTION__);
> > + return (NULL);
> > + }
> > + if (uuidstr == NULL) {
> > + virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> > + goto error;
> > + }
> > + /* XXX: sexpr_uuid() also supports 'xxxx-xxxx-xxxx-xxxx' format.
> > + * We needn't it here. Right?
> > + */
>
> Hum, I would rather use virUUIDParse() to make sure there is no
> confusion, a public API should be tolerant about this I think
> and it's cleaner to reuse it !
This was in fact just cut+paste from the existing APIs of similar
name in libvirt.c. I'll send another patch which fixes them all to
use virUUIDParse.
> > + ret = sscanf(uuidstr,
> > + "%02x%02x%02x%02x-"
> > + "%02x%02x-"
> > + "%02x%02x-"
> > + "%02x%02x-"
> > + "%02x%02x%02x%02x%02x%02x",
> > + raw + 0, raw + 1, raw + 2, raw + 3,
> > + raw + 4, raw + 5, raw + 6, raw + 7,
> > + raw + 8, raw + 9, raw + 10, raw + 11,
> > + raw + 12, raw + 13, raw + 14, raw + 15);
> > +
> > + if (ret!=VIR_UUID_BUFLEN) {
> > + virLibConnError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> > + goto error;
> > + }
> > + for (i = 0; i < VIR_UUID_BUFLEN; i++)
> > + uuid[i] = raw[i] & 0xFF;
>
>
> ACK, overall an important cleanup, as it affects the API and the
> network format !
Daniel
--
|: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :|
|: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :|
|: http://autobuild.org -o- http://search.cpan.org/~danberr/ :|
|: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|
More information about the libvir-list
mailing list