
On 11/12/2010 09:22 AM, Daniel P. Berrange wrote:
The "find-storage-pool-sources-as" command takes two arguments, a hostname and a port number. For some reason the code would also then look for a port number appended to the hostname string by searching for ':'. This totally breaks if the user gives an IPv6 address, and is redundant, since you can already provide a port as a separate argument
* tools/virsh.c: Remove bogus port number handling code --- tools/virsh.c | 11 ++--------- 1 files changed, 2 insertions(+), 9 deletions(-)
diff --git a/tools/virsh.c b/tools/virsh.c index 69a42e8..a840758 100644 --- a/tools/virsh.c +++ b/tools/virsh.c @@ -5772,15 +5772,8 @@ cmdPoolDiscoverSourcesAs(vshControl * ctl, const vshCmd * cmd ATTRIBUTE_UNUSED) if (host) { size_t hostlen = strlen(host); char *port = vshCommandOptString(cmd, "port", &found); - if (!found) { - port = strrchr(host, ':'); - if (port) { - if (*(++port)) - hostlen = port - host - 1; - else - port = NULL; - } - } + if (!found) + port = NULL;
Slight change which may break existing scripts that used an undocumented method, but makes sense given that the documentation calls out both arguments, and in light of IPv6 hostnames.
virBuffer buf = VIR_BUFFER_INITIALIZER; virBufferAddLit(&buf, "<source>\n"); virBufferVSprintf(&buf, " <host name='%.*s'",(int)hostlen, host);
However, given that we are no longer computing hostlen as anything other than strlen(host), I would recommend that you respin this patch to completely get rid of hostlen, and use %s instead of %.*s. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org