On 04/08/2013 10:45 AM, Daniel P. Berrange wrote:
On Mon, Apr 08, 2013 at 12:35:40PM -0400, Milos Vyletel wrote:
> Even though
http://libvirt.org/formatdomain.html#elementsMetadata
> states that it requires RFC4122 compliance UUIDs that are generated
> by virUUIDGenerate() are not. Neither does virUUIDIsValid() check
> for RFC4122 compliance. Following patch modifies virUUIDGenerate()
> to generate valid UUIDs and adds check to virUUIDIsValid() to validate
> UUIDs.
>
>
> + /*
> + * RFC4122 defines version 1 to 5 (section 4.1.3)
> + * RFC4122 defined variant is desribed in section 4.1.1
> + */
> + version = (uuid[6] >> 4);
> + variant = (uuid[8] >> 6);
> + if (!(version > 0 && version <= 5) || variant != 2)
> + return 0;
> +
> c = uuid[0];
>
> for (i = 1; i < VIR_UUID_BUFLEN; i++)
but NACk to this part
What you're checking here is just one possible valid scheme for UUIDs.
We shouldn't reject UUIDs just because they use a different scheme than
the one we do.
Furthermore, if we took this hunk, but a user is running a guest created
by a previous version of libvirt that happened to generate an invalid
UUID, we would lose the ability to manage that older guest. It _might_
be appropriate to warn the user when a UUID is not valid according to
the schemes we recognize, but it must be a warning and not a fatal
error; furthermore, if we do add such a warning, we'd need to recognize
ALL of the schemes that are valid in the RFCs, not just the particular
scheme we use when generating a uuid ourselves, so as to minimize false
negative printouts of the warning.
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org