From 0883f3ba04b60ceb5d61abb2f8008c2ff952049c Mon Sep 17 00:00:00 2001 From: Michael Chapman Date: Wed, 23 Oct 2013 15:15:12 +1100 Subject: [PATCH] qemu: fix well-formed migration URI formatting 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 --- 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 0439ba4323..cb596209fa 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; -- 2.39.5