From 396c4d34f8875df0322d15151c2fb07121f5590e Mon Sep 17 00:00:00 2001 From: Milos Vyletel Date: Mon, 8 Apr 2013 14:10:54 -0400 Subject: [PATCH] Generate RFC4122 compliant UUIDs Even though http://libvirt.org/formatdomain.html#elementsMetadata states that it requires RFC4122 compliance UUIDs that are generated by virUUIDGenerate() are not. Following patch modifies generated UUIDs to conform to rules described in RFC. Signed-off-by: Milos Vyletel --- src/util/viruuid.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/util/viruuid.c b/src/util/viruuid.c index 7250543fe1..8f82187467 100644 --- a/src/util/viruuid.c +++ b/src/util/viruuid.c @@ -114,6 +114,25 @@ virUUIDGenerate(unsigned char *uuid) err = virUUIDGeneratePseudoRandomBytes(uuid, VIR_UUID_BUFLEN); } + /* + * Make UUID RFC 4122 compliant. Following form will be used: + * + * xxxxxxxx-xxxx-Axxx-Bxxx-xxxxxxxxxxxx + * + * where + * A is version defined in 4.1.3 of RFC + * Msb0 Msb1 Msb2 Msb3 Version Description + * 0 1 0 0 4 The randomly or pseudo- + * randomly generated version + * specified in this document. + * + * B is variant defined in 4.1.1 of RFC + * Msb0 Msb1 Msb2 Description + * 1 0 x The variant specified in this document. + */ + uuid[6] = (uuid[6] & 0x0F) | (4 << 4); + uuid[8] = (uuid[8] & 0x3F) | (2 << 6); + return err; }