When adding an automatically allocated port to a well-formed migration URI, keep it well-formed: tcp://1.2.3.4/ -> tcp://1.2.3.4/:12345 # wrong tcp://1.2.3.4/ -> tcp://1.2.3.4:12345/ # fixed tcp://1.2.3.4 -> tcp://1.2.3.4:12345 # still works tcp:1.2.3.4 -> tcp:1.2.3.4:12345 # still works (old syntax) Signed-off-by: Michael Chapman <mike@xxxxxxxxxxxxxxxxx> --- src/qemu/qemu_migration.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 0439ba4..cb59620 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -2535,6 +2535,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, char *uri_str = NULL; int ret = -1; virURIPtr uri = NULL; + bool well_formed_uri = true; VIR_DEBUG("driver=%p, dconn=%p, cookiein=%s, cookieinlen=%d, " "cookieout=%p, cookieoutlen=%p, uri_in=%s, uri_out=%p, " @@ -2597,6 +2598,7 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, /* Convert uri_in to well-formed URI with // after tcp: */ if (!(STRPREFIX(uri_in, "tcp://"))) { + well_formed_uri = false; if (virAsprintf(&uri_str, "tcp://%s", p) < 0) goto cleanup; } @@ -2626,9 +2628,17 @@ qemuMigrationPrepareDirect(virQEMUDriverPtr driver, goto cleanup; } - /* Caller frees */ - if (virAsprintf(uri_out, "%s:%d", uri_in, port) < 0) - goto cleanup; + if (well_formed_uri) { + uri->port = port; + + /* Caller frees */ + if (!(*uri_out = virURIFormat(uri))) + goto cleanup; + } else { + /* Caller frees */ + if (virAsprintf(uri_out, "%s:%d", uri_in, port) < 0) + goto cleanup; + } } else { port = uri->port; -- 1.8.3.1 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list