[Libguestfs] [PATCH v2v v2 1/2] rhv-upload: Validate UUIDs passed to -oo rhv-disk-uuid (RHBZ#1789279)

Martin Kletzander mkletzan at redhat.com
Wed Jan 29 14:54:21 UTC 2020


On Wed, Jan 29, 2020 at 03:34:48PM +0100, Martin Kletzander wrote:
>The validation helps us fail early and with a sensible error message.  The NIL
>UUID is not valid for oVirt, but other than that there is no other logic in
>there merely because the UUID types are a matter of the generator and they are
>just forwarded in this partucular case.
>
>Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
>---
> v2v/output_rhv_upload.ml | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
>diff --git a/v2v/output_rhv_upload.ml b/v2v/output_rhv_upload.ml
>index 14153db36897..6482460f8de8 100644
>--- a/v2v/output_rhv_upload.ml
>+++ b/v2v/output_rhv_upload.ml
>@@ -49,6 +49,16 @@ after their uploads (if you do, you must supply one for each disk):
>   -oo rhv-disk-uuid=UUID          Disk UUID
> ")
>
>+let is_nonnil_uuid uuid =
>+  let nil_uuid = "00000000-0000-0000-0000-000000000000" in
>+  let rex_uuid = lazy (
>+    let hex = "[a-fA-F0-9]" in
>+    let str = sprintf "^%s{8}-%s{4}-%s{4}-%s{4}-%s{12}$" hex hex hex hex hex in
>+    PCRE.compile str
>+  ) in
>+  if uuid = nil_uuid then false
>+  else PCRE.matches rex_uuid uuid
>+
> let parse_output_options options =
>   let rhv_cafile = ref None in
>   let rhv_cluster = ref None in
>@@ -71,6 +81,8 @@ let parse_output_options options =
>     | "rhv-verifypeer", "" -> rhv_verifypeer := true
>     | "rhv-verifypeer", v -> rhv_verifypeer := bool_of_string v
>     | "rhv-disk-uuid", v ->
>+       if not (is_nonnil_uuid v) then
>+         error (f_"-o rhv-upload: invalid UUID for -oo rhv-disk-uuid");
>        rhv_disk_uuids := Some (v :: (Option.default [] !rhv_disk_uuids))
>     | k, _ ->
>        error (f_"-o rhv-upload: unknown output option ‘-oo %s’") k
>-- 

I was too fast with the sending, consider this squashed in, (the fixed version
is in my github repo [1]):

diff --git i/v2v/output_rhv_upload.ml w/v2v/output_rhv_upload.ml
index 6482460f8de8..c06c4c1844de 100644
--- i/v2v/output_rhv_upload.ml
+++ w/v2v/output_rhv_upload.ml
@@ -57,7 +57,7 @@ let is_nonnil_uuid uuid =
      PCRE.compile str
    ) in
    if uuid = nil_uuid then false
-  else PCRE.matches rex_uuid uuid
+  else PCRE.matches (Lazy.force rex_uuid) uuid

  let parse_output_options options =
    let rhv_cafile = ref None in
--

[1] https://github.com/nertpinx/virt-v2v/tree/uuids

>2.25.0
>
>_______________________________________________
>Libguestfs mailing list
>Libguestfs at redhat.com
>https://www.redhat.com/mailman/listinfo/libguestfs
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20200129/a9ba6c70/attachment.sig>


More information about the Libguestfs mailing list