It mimics a bit in OCaml the logic used in commit a95214b1985e694946e3426120a6fdc13a3f081f (for the main library) and commit 588af1953e5f7ab74009b9175cc5d3efb8bb651a (in disk-create), so in OCaml tools direct calls to qemu/qemu-img with filenames provided by the user can properly handle filenames with e.g. ':'. --- mllib/common_utils.ml | 13 +++++++++++++ mllib/common_utils.mli | 8 ++++++++ 2 files changed, 21 insertions(+)
diff --git a/mllib/common_utils.ml b/mllib/common_utils.ml index b143710..4d3bf95 100644 --- a/mllib/common_utils.ml +++ b/mllib/common_utils.ml @@ -603,3 +603,16 @@ let is_directory path = let absolute_path path = if not (Filename.is_relative path) then path else Sys.getcwd () // path + +(* Sanitizes a filename for passing it safely to qemu/qemu-img. + * + * If the filename is something like "file:foo" then qemu-img will + * try to interpret that as "foo" in the file:/// protocol. To + * avoid that, if the path is relative prefix it with "./" since + * qemu-img won't try to interpret such a path. + *) +let qemu_input_filename filename = + if String.length filename > 0 && filename.[0] <> '/' then + "./" ^ filename + else + filename diff --git a/mllib/common_utils.mli b/mllib/common_utils.mli index 2103ff1..e59d802 100644 --- a/mllib/common_utils.mli +++ b/mllib/common_utils.mli @@ -131,3 +131,11 @@ val is_directory : string -> bool val absolute_path : string -> string (** Convert any path to an absolute path. *) + +val qemu_input_filename : string -> string +(** Sanitizes a filename for passing it safely to qemu/qemu-img. + + If the filename is something like "file:foo" then qemu-img will + try to interpret that as "foo" in the file:/// protocol. To + avoid that, if the path is relative prefix it with "./" since + qemu-img won't try to interpret such a path. *) -- 1.9.3 _______________________________________________ Libguestfs mailing list [email protected] https://www.redhat.com/mailman/listinfo/libguestfs
