[Libguestfs] [PATCH v5 1/2] v2v: ova: fix checking of the manifest file

Tomáš Golembiovský tgolembi at redhat.com
Fri Oct 7 12:12:21 UTC 2016


The regular expression for parsing the manifest line was wrong. There is
a mandatory space between '=' and the hash.

Another problem was that only the first line of the manifest file was
actually processed.

Also added some debugging info and warning to catch problems with
parsing.

Signed-off-by: Tomáš Golembiovský <tgolembi at redhat.com>
---
 v2v/input_ova.ml                 | 7 ++++++-
 v2v/test-v2v-i-ova-formats.sh    | 2 +-
 v2v/test-v2v-i-ova-gz.sh         | 2 +-
 v2v/test-v2v-i-ova-subfolders.sh | 2 +-
 v2v/test-v2v-i-ova-two-disks.sh  | 4 ++--
 5 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/v2v/input_ova.ml b/v2v/input_ova.ml
index 5731a45..0d04659 100644
--- a/v2v/input_ova.ml
+++ b/v2v/input_ova.ml
@@ -133,9 +133,10 @@ object
 
     (* Read any .mf (manifest) files and verify sha1. *)
     let mf = find_files exploded ".mf" in
-    let rex = Str.regexp "SHA1(\\(.*\\))=\\([0-9a-fA-F]+\\)\r?" in
+    let rex = Str.regexp "SHA1(\\(.*\\))= \\([0-9a-fA-F]+\\)\r?" in
     List.iter (
       fun mf ->
+        debug "processing manifest %s" mf;
         let mf_folder = Filename.dirname mf in
         let chan = open_in mf in
         let rec loop () =
@@ -149,6 +150,10 @@ object
               error (f_"checksum of disk %s does not match manifest %s (actual sha1(%s) = %s, expected sha1 (%s) = %s)")
                 disk mf disk actual disk expected;
           )
+          else
+            warning (f_"unable to parse line from manifest file: %S") line
+          ;
+          loop ()
         in
         (try loop () with End_of_file -> ());
         close_in chan
diff --git a/v2v/test-v2v-i-ova-formats.sh b/v2v/test-v2v-i-ova-formats.sh
index 3e2923d..d113994 100755
--- a/v2v/test-v2v-i-ova-formats.sh
+++ b/v2v/test-v2v-i-ova-formats.sh
@@ -58,7 +58,7 @@ pushd $d
 # conversion, so the contents of the disks doesn't matter.
 truncate -s 10k disk1.vmdk
 sha=`do_sha1 disk1.vmdk`
-echo -e "SHA1(disk1.vmdk)=$sha\r" > disk1.mf
+echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf
 
 for format in $formats; do
     case "$format" in
diff --git a/v2v/test-v2v-i-ova-gz.sh b/v2v/test-v2v-i-ova-gz.sh
index 086ff98..a38e1b4 100755
--- a/v2v/test-v2v-i-ova-gz.sh
+++ b/v2v/test-v2v-i-ova-gz.sh
@@ -45,7 +45,7 @@ pushd $d
 truncate -s 10k disk1.vmdk
 gzip disk1.vmdk
 sha=`do_sha1 disk1.vmdk.gz`
-echo -e "SHA1(disk1.vmdk.gz)=$sha\r" > disk1.mf
+echo -e "SHA1(disk1.vmdk.gz)= $sha\r" > disk1.mf
 
 tar -cf test.ova ../test-v2v-i-ova-gz.ovf disk1.vmdk.gz disk1.mf
 popd
diff --git a/v2v/test-v2v-i-ova-subfolders.sh b/v2v/test-v2v-i-ova-subfolders.sh
index a590fcc..c49f7cb 100755
--- a/v2v/test-v2v-i-ova-subfolders.sh
+++ b/v2v/test-v2v-i-ova-subfolders.sh
@@ -46,7 +46,7 @@ pushd $d/subfolder
 
 truncate -s 10k disk1.vmdk
 sha=`do_sha1 disk1.vmdk`
-echo -e "SHA1(disk1.vmdk)=$sha\r" > disk1.mf
+echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf
 
 cd ..
 tar -cf test.ova subfolder
diff --git a/v2v/test-v2v-i-ova-two-disks.sh b/v2v/test-v2v-i-ova-two-disks.sh
index 4e7f38b..aefd90e 100755
--- a/v2v/test-v2v-i-ova-two-disks.sh
+++ b/v2v/test-v2v-i-ova-two-disks.sh
@@ -47,10 +47,10 @@ pushd $d
 # conversion, so the contents of the disks doesn't matter.
 truncate -s 10k disk1.vmdk
 sha=`do_sha1 disk1.vmdk`
-echo -e "SHA1(disk1.vmdk)=$sha\r" > disk1.mf
+echo -e "SHA1(disk1.vmdk)= $sha\r" > disk1.mf
 truncate -s 100k disk2.vmdk
 sha=`do_sha1 disk2.vmdk`
-echo -e "SHA1(disk2.vmdk)=$sha\r" > disk2.mf
+echo -e "SHA1(disk2.vmdk)= $sha\r" > disk2.mf
 
 tar -cf test.ova ../test-v2v-i-ova-two-disks.ovf disk1.vmdk disk1.mf disk2.vmdk disk2.mf
 popd
-- 
2.10.0




More information about the Libguestfs mailing list