mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
v2v: ova: support SHA256 hashes in manifest
The OVF standard allows the use of SHA256 hashes in the manifest file. Adding support for this. One of the tests was updated to put SHA256 into manifest file. Signed-off-by: Tomáš Golembiovský <tgolembi@redhat.com>
This commit is contained in:
committed by
Pino Toscano
parent
6b7ea3c681
commit
52a8202635
@@ -41,3 +41,16 @@ do_sha1 ()
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
do_sha256 ()
|
||||||
|
{
|
||||||
|
case "$(uname)" in
|
||||||
|
Linux)
|
||||||
|
sha256sum "$1" | awk '{print $1}'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "$0: unknown method to calculate SHA256 of file on $(uname)"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ object
|
|||||||
|
|
||||||
(* Read any .mf (manifest) files and verify sha1. *)
|
(* Read any .mf (manifest) files and verify sha1. *)
|
||||||
let mf = find_files exploded ".mf" in
|
let mf = find_files exploded ".mf" in
|
||||||
let rex = Str.regexp "SHA1(\\(.*\\))= \\([0-9a-fA-F]+\\)\r?" in
|
let rex = Str.regexp "\\(SHA1\\|SHA256\\)(\\(.*\\))= \\([0-9a-fA-F]+\\)\r?" in
|
||||||
List.iter (
|
List.iter (
|
||||||
fun mf ->
|
fun mf ->
|
||||||
debug "processing manifest %s" mf;
|
debug "processing manifest %s" mf;
|
||||||
@@ -142,13 +142,14 @@ object
|
|||||||
let rec loop () =
|
let rec loop () =
|
||||||
let line = input_line chan in
|
let line = input_line chan in
|
||||||
if Str.string_match rex line 0 then (
|
if Str.string_match rex line 0 then (
|
||||||
let disk = Str.matched_group 1 line in
|
let mode = Str.matched_group 1 line in
|
||||||
let expected = Str.matched_group 2 line in
|
let disk = Str.matched_group 2 line in
|
||||||
let csum = Checksums.SHA1 expected in
|
let expected = Str.matched_group 3 line in
|
||||||
|
let csum = Checksums.of_string mode expected in
|
||||||
try Checksums.verify_checksum csum (mf_folder // disk)
|
try Checksums.verify_checksum csum (mf_folder // disk)
|
||||||
with Checksums.Mismatched_checksum (_, actual) ->
|
with Checksums.Mismatched_checksum (_, actual) ->
|
||||||
error (f_"checksum of disk %s does not match manifest %s (actual sha1(%s) = %s, expected sha1 (%s) = %s)")
|
error (f_"checksum of disk %s does not match manifest %s (actual %s(%s) = %s, expected %s(%s) = %s)")
|
||||||
disk mf disk actual disk expected;
|
disk mf mode disk actual mode disk expected;
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
warning (f_"unable to parse line from manifest file: %S") line
|
warning (f_"unable to parse line from manifest file: %S") line
|
||||||
|
|||||||
@@ -57,8 +57,8 @@ qemu-img convert $f -O vmdk $d/$vmdk
|
|||||||
cp $ovf $d/$ovf
|
cp $ovf $d/$ovf
|
||||||
sha1=`do_sha1 $d/$ovf`
|
sha1=`do_sha1 $d/$ovf`
|
||||||
echo "SHA1($ovf)= $sha1" > $d/$mf
|
echo "SHA1($ovf)= $sha1" > $d/$mf
|
||||||
sha1=`do_sha1 $d/$vmdk`
|
sha256=`do_sha256 $d/$vmdk`
|
||||||
echo "SHA1($vmdk)= $sha1" >> $d/$mf
|
echo "SHA256($vmdk)= $sha256" >> $d/$mf
|
||||||
|
|
||||||
pushd .
|
pushd .
|
||||||
cd $d
|
cd $d
|
||||||
|
|||||||
Reference in New Issue
Block a user