Richard W.M. Jones
2022-Mar-23 17:04 UTC
[Libguestfs] [PATCH p2v] ssh: Allow interop with virt-v2v 2.0
The code previously checked that the remote version of virt-v2v was
1.x and >= 1.28. Since virt-v2v 2.0 has been released and is broadly
compatible, allow 2.0 as well.
---
ssh.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/ssh.c b/ssh.c
index ce0caaa..7ac43eb 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1030,11 +1030,11 @@ add_output_driver (const char *name, size_t len)
static int
compatible_version (const char *v2v_version)
{
- unsigned v2v_minor;
+ unsigned v2v_major, v2v_minor;
- /* The major version must always be 1. */
- if (!STRPREFIX (v2v_version, "1.")) {
- set_ssh_error ("virt-v2v major version is not 1 (\"%s\"),
"
+ /* The major version must always be 1 or 2. */
+ if (! (STRPREFIX (v2v_version, "1.") || STRPREFIX (v2v_version,
"2."))) {
+ set_ssh_error ("virt-v2v major version is not 1 or 2
(\"%s\"), "
"this version of virt-p2v is not compatible.",
v2v_version);
return 0;
@@ -1045,13 +1045,13 @@ compatible_version (const char *v2v_version)
* that we published during development, nor (b) using old virt-v2v.
* We should remain compatible with any virt-v2v after 1.28.
*/
- if (sscanf (v2v_version, "1.%u", &v2v_minor) != 1) {
+ if (sscanf (v2v_version, "%u.%u", &v2v_major, &v2v_minor)
!= 2) {
set_ssh_internal_error ("cannot parse virt-v2v version string
(\"%s\")",
v2v_version);
return 0;
}
- if (v2v_minor < 28) {
+ if (v2v_major == 1 && v2v_minor < 28) {
set_ssh_error ("virt-v2v version is < 1.28 (\"%s\"),
"
"you must upgrade to virt-v2v >= 1.28 on "
"the conversion server.", v2v_version);
--
2.35.1
Laszlo Ersek
2022-Mar-24 08:49 UTC
[Libguestfs] [PATCH p2v] ssh: Allow interop with virt-v2v 2.0
On 03/23/22 18:04, Richard W.M. Jones wrote:> The code previously checked that the remote version of virt-v2v was > 1.x and >= 1.28. Since virt-v2v 2.0 has been released and is broadly > compatible, allow 2.0 as well. > --- > ssh.c | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/ssh.c b/ssh.c > index ce0caaa..7ac43eb 100644 > --- a/ssh.c > +++ b/ssh.c > @@ -1030,11 +1030,11 @@ add_output_driver (const char *name, size_t len) > static int > compatible_version (const char *v2v_version) > { > - unsigned v2v_minor; > + unsigned v2v_major, v2v_minor; > > - /* The major version must always be 1. */ > - if (!STRPREFIX (v2v_version, "1.")) { > - set_ssh_error ("virt-v2v major version is not 1 (\"%s\"), " > + /* The major version must always be 1 or 2. */ > + if (! (STRPREFIX (v2v_version, "1.") || STRPREFIX (v2v_version, "2."))) { > + set_ssh_error ("virt-v2v major version is not 1 or 2 (\"%s\"), " > "this version of virt-p2v is not compatible.", > v2v_version); > return 0;I have a personal preference for avoiding such "outermost" logical negations; I always move negations as far inside as possible, using De Morgan's Laws: !STRPREFIX (v2v_version, "1.") && !STRPREFIX (v2v_version, "2.") However, this is just a style question, and the logic is certainly correct. Somewhat relatedly, regarding the English language error message, I think we could slightly clarify it: virt-v2v major version is neither 1 nor 2 The rest looks OK to me. With or without the msg update: Reviewed-by: Laszlo Ersek <lersek at redhat.com> Thanks Laszlo> @@ -1045,13 +1045,13 @@ compatible_version (const char *v2v_version) > * that we published during development, nor (b) using old virt-v2v. > * We should remain compatible with any virt-v2v after 1.28. > */ > - if (sscanf (v2v_version, "1.%u", &v2v_minor) != 1) { > + if (sscanf (v2v_version, "%u.%u", &v2v_major, &v2v_minor) != 2) { > set_ssh_internal_error ("cannot parse virt-v2v version string (\"%s\")", > v2v_version); > return 0; > } > > - if (v2v_minor < 28) { > + if (v2v_major == 1 && v2v_minor < 28) { > set_ssh_error ("virt-v2v version is < 1.28 (\"%s\"), " > "you must upgrade to virt-v2v >= 1.28 on " > "the conversion server.", v2v_version); >