[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