mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-13 17:18:01 +03:00
util: fix handling of unspecified port in URI
When no server name is provided in the URI, modern versions of libxml2
will set the port to '-1'. This is a change from behaviour with earlier
versions which set it to 0.
Libvirt expects the port to be 0 in these cases and as a result we get a
bug when connecting to URIs which lack a server name:
$ virsh -c test+ssh:///default list
error: failed to connect to the hypervisor
error: Cannot recv data: Bad port '-1': Connection reset by peer
This libxml2 change was attempting to fix another bug identified by
libvirt where it didn't roundtrip URIs correctly in:
beb7281055
Essentially libxml2 was not expecting apps to look at the URI port
field when the server name is not provided. This was a reasonable
assumption, but none the less libvirt did look at it :-)
The fix is to ensure we explicitly set port to 0 when server name
is not present, avoiding undefined behaviour for the port field in
libxml2.
Reviewed-by: Erik Skultety <eskultet@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
66a85cb136
commit
87c972552c
@ -171,7 +171,16 @@ virURIParse(const char *uri)
|
||||
goto error;
|
||||
if (VIR_STRDUP(ret->server, xmluri->server) < 0)
|
||||
goto error;
|
||||
ret->port = xmluri->port;
|
||||
/* xmluri->port value is not defined if server was
|
||||
* not given. Modern versions libxml2 fill port
|
||||
* differently to old versions in this case, so
|
||||
* don't rely on it. eg libxml2 git commit:
|
||||
* beb7281055dbf0ed4d041022a67c6c5cfd126f25
|
||||
*/
|
||||
if (!ret->server || STREQ(ret->server, ""))
|
||||
ret->port = 0;
|
||||
else
|
||||
ret->port = xmluri->port;
|
||||
if (VIR_STRDUP(ret->path, xmluri->path) < 0)
|
||||
goto error;
|
||||
#ifdef HAVE_XMLURI_QUERY_RAW
|
||||
|
Loading…
Reference in New Issue
Block a user