qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues
@ 2013-06-03 15:54 Ján Tomko
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit Ján Tomko
                   ` (2 more replies)
  0 siblings, 3 replies; 10+ messages in thread
From: Ján Tomko @ 2013-06-03 15:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini

Fix parsing of NBD URIs with IPv6 addresses, broken by v1.4.0-736-gf17c90b
and fix parsing of NBD filenames with hostnames starting with a digit (fixed
by the same commit, but only for NBD URIs):
https://lists.gnu.org/archive/html/qemu-devel/2013-05/msg04719.html

Ján Tomko (2):
  qemu-socket: allow hostnames starting with a digit
  nbd: strip braces from literal IPv6 address in URI

 block/nbd.c         | 11 ++++++++++-
 util/qemu-sockets.c | 13 ++++---------
 2 files changed, 14 insertions(+), 10 deletions(-)

-- 
1.8.1.5

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
  2013-06-03 15:54 [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Ján Tomko
@ 2013-06-03 15:54 ` Ján Tomko
  2013-06-18  9:42   ` Paolo Bonzini
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Ján Tomko
  2013-06-03 20:15 ` [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Paolo Bonzini
  2 siblings, 1 reply; 10+ messages in thread
From: Ján Tomko @ 2013-06-03 15:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini

According to RFC 1123 [1], hostnames can start with a digit too.

[1] http://tools.ietf.org/html/rfc1123#page-13

Signed-off-by: Ján Tomko <jtomko@redhat.com>
---
 util/qemu-sockets.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
index fdd8dc4..727dafa 100644
--- a/util/qemu-sockets.c
+++ b/util/qemu-sockets.c
@@ -24,7 +24,6 @@
 
 #include "monitor/monitor.h"
 #include "qemu/sockets.h"
-#include "qemu-common.h" /* for qemu_isdigit */
 #include "qemu/main-loop.h"
 
 #ifndef AI_ADDRCONFIG
@@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp)
             goto fail;
         }
         addr->ipv6 = addr->has_ipv6 = true;
-    } else if (qemu_isdigit(str[0])) {
-        /* IPv4 addr */
-        if (2 != sscanf(str, "%64[0-9.]:%32[^,]%n", host, port, &pos)) {
-            error_setg(errp, "error parsing IPv4 address '%s'", str);
-            goto fail;
-        }
-        addr->ipv4 = addr->has_ipv4 = true;
     } else {
-        /* hostname */
+        /* hostname or IPv4 addr */
         if (2 != sscanf(str, "%64[^:]:%32[^,]%n", host, port, &pos)) {
             error_setg(errp, "error parsing address '%s'", str);
             goto fail;
         }
+        if (strcspn(host, "0123456789.") == 0) {
+            addr->ipv4 = addr->has_ipv4 = true;
+        }
     }
 
     addr->host = g_strdup(host);
-- 
1.8.1.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI
  2013-06-03 15:54 [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Ján Tomko
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit Ján Tomko
@ 2013-06-03 15:54 ` Ján Tomko
  2013-06-04 21:27   ` Paolo Bonzini
  2013-06-03 20:15 ` [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Paolo Bonzini
  2 siblings, 1 reply; 10+ messages in thread
From: Ján Tomko @ 2013-06-03 15:54 UTC (permalink / raw)
  To: qemu-devel; +Cc: pbonzini

Otherwise they would get passed to getaddrinfo and fail with:
address resolution failed for [::1]:1234: Name or service not known

(Broken by commit v1.4.0-736-gf17c90b)

Signed-off-by: Ján Tomko <jtomko@redhat.com>
---
 block/nbd.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/block/nbd.c b/block/nbd.c
index 30e3b78..9c480b8 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -118,13 +118,22 @@ static int nbd_parse_uri(const char *filename, QDict *options)
         }
         qdict_put(options, "path", qstring_from_str(qp->p[0].value));
     } else {
+        QString *host;
         /* nbd[+tcp]://host[:port]/export */
         if (!uri->server) {
             ret = -EINVAL;
             goto out;
         }
 
-        qdict_put(options, "host", qstring_from_str(uri->server));
+        /* strip braces from literal IPv6 address */
+        if (uri->server[0] == '[') {
+            host = qstring_from_substr(uri->server, 1,
+                                       strlen(uri->server) - 2);
+        } else {
+            host = qstring_from_str(uri->server);
+        }
+
+        qdict_put(options, "host", host);
         if (uri->port) {
             char* port_str = g_strdup_printf("%d", uri->port);
             qdict_put(options, "port", qstring_from_str(port_str));
-- 
1.8.1.5

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues
  2013-06-03 15:54 [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Ján Tomko
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit Ján Tomko
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Ján Tomko
@ 2013-06-03 20:15 ` Paolo Bonzini
  2 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2013-06-03 20:15 UTC (permalink / raw)
  To: Ján Tomko; +Cc: qemu-devel

Il 03/06/2013 17:54, Ján Tomko ha scritto:
> Fix parsing of NBD URIs with IPv6 addresses, broken by v1.4.0-736-gf17c90b
> and fix parsing of NBD filenames with hostnames starting with a digit (fixed
> by the same commit, but only for NBD URIs):
> https://lists.gnu.org/archive/html/qemu-devel/2013-05/msg04719.html
> 
> Ján Tomko (2):
>   qemu-socket: allow hostnames starting with a digit
>   nbd: strip braces from literal IPv6 address in URI
> 
>  block/nbd.c         | 11 ++++++++++-
>  util/qemu-sockets.c | 13 ++++---------
>  2 files changed, 14 insertions(+), 10 deletions(-)
> 

Thanks, applied both to nbd-next tree.

Paolo

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Ján Tomko
@ 2013-06-04 21:27   ` Paolo Bonzini
  2013-06-13 14:55     ` Ján Tomko
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2013-06-04 21:27 UTC (permalink / raw)
  To: Ján Tomko; +Cc: qemu-devel

Il 03/06/2013 17:54, Ján Tomko ha scritto:
> Otherwise they would get passed to getaddrinfo and fail with:
> address resolution failed for [::1]:1234: Name or service not known

Hmm... Hai Huang found a similar problem:

error: internal error unable to execute QEMU command 'nbd-server-start':
address resolution failed for [::]:5900: Name or service not known

This one is a libvirt bug, but perhaps it's simpler to just have a
wrapper for getaddrinfo that strips brackets (and not strip the brackets
in inet_parse, too).

Paolo

> (Broken by commit v1.4.0-736-gf17c90b)
> 
> Signed-off-by: Ján Tomko <jtomko@redhat.com>
> ---
>  block/nbd.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/block/nbd.c b/block/nbd.c
> index 30e3b78..9c480b8 100644
> --- a/block/nbd.c
> +++ b/block/nbd.c
> @@ -118,13 +118,22 @@ static int nbd_parse_uri(const char *filename, QDict *options)
>          }
>          qdict_put(options, "path", qstring_from_str(qp->p[0].value));
>      } else {
> +        QString *host;
>          /* nbd[+tcp]://host[:port]/export */
>          if (!uri->server) {
>              ret = -EINVAL;
>              goto out;
>          }
>  
> -        qdict_put(options, "host", qstring_from_str(uri->server));
> +        /* strip braces from literal IPv6 address */
> +        if (uri->server[0] == '[') {
> +            host = qstring_from_substr(uri->server, 1,
> +                                       strlen(uri->server) - 2);
> +        } else {
> +            host = qstring_from_str(uri->server);
> +        }
> +
> +        qdict_put(options, "host", host);
>          if (uri->port) {
>              char* port_str = g_strdup_printf("%d", uri->port);
>              qdict_put(options, "port", qstring_from_str(port_str));
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI
  2013-06-04 21:27   ` Paolo Bonzini
@ 2013-06-13 14:55     ` Ján Tomko
  0 siblings, 0 replies; 10+ messages in thread
From: Ján Tomko @ 2013-06-13 14:55 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel

On 06/04/2013 11:27 PM, Paolo Bonzini wrote:
> Il 03/06/2013 17:54, Ján Tomko ha scritto:
>> Otherwise they would get passed to getaddrinfo and fail with:
>> address resolution failed for [::1]:1234: Name or service not known
> 
> Hmm... Hai Huang found a similar problem:
> 
> error: internal error unable to execute QEMU command 'nbd-server-start':
> address resolution failed for [::]:5900: Name or service not known
> 

That one should be fixed in libvirt-1.0.5.2 and libvirt-1.0.6 now. [1]

> This one is a libvirt bug, but perhaps it's simpler to just have a
> wrapper for getaddrinfo that strips brackets (and not strip the brackets
> in inet_parse, too).

I'm not sure if there are places other than calling getaddrinfo where having
brackets would be bad, I'm not that familiar with QEMU code.

I've thought about stripping the brackets in uri_parse too, as we do in
libvirt when parsing URIs. This wouldn't fix the case of someone specifying a
bracket-ecaped hostname where there is no need for escaping it, like the
libvirt bug.

And my patch is incomplete, because there are other block drivers calling
uri_parse without stripping the brackets.

Jan

[1] http://libvirt.org/git/?p=libvirt.git;a=commitdiff;h=3accd7eb

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
  2013-06-03 15:54 ` [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit Ján Tomko
@ 2013-06-18  9:42   ` Paolo Bonzini
  2013-06-18 11:29     ` Ján Tomko
  0 siblings, 1 reply; 10+ messages in thread
From: Paolo Bonzini @ 2013-06-18  9:42 UTC (permalink / raw)
  To: Ján Tomko; +Cc: qemu-devel

Il 03/06/2013 17:54, Ján Tomko ha scritto:
> According to RFC 1123 [1], hostnames can start with a digit too.
> 
> [1] http://tools.ietf.org/html/rfc1123#page-13
> 
> Signed-off-by: Ján Tomko <jtomko@redhat.com>
> ---
>  util/qemu-sockets.c | 13 ++++---------
>  1 file changed, 4 insertions(+), 9 deletions(-)
> 
> diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c
> index fdd8dc4..727dafa 100644
> --- a/util/qemu-sockets.c
> +++ b/util/qemu-sockets.c
> @@ -24,7 +24,6 @@
>  
>  #include "monitor/monitor.h"
>  #include "qemu/sockets.h"
> -#include "qemu-common.h" /* for qemu_isdigit */
>  #include "qemu/main-loop.h"
>  
>  #ifndef AI_ADDRCONFIG
> @@ -511,19 +510,15 @@ InetSocketAddress *inet_parse(const char *str, Error **errp)
>              goto fail;
>          }
>          addr->ipv6 = addr->has_ipv6 = true;
> -    } else if (qemu_isdigit(str[0])) {
> -        /* IPv4 addr */
> -        if (2 != sscanf(str, "%64[0-9.]:%32[^,]%n", host, port, &pos)) {
> -            error_setg(errp, "error parsing IPv4 address '%s'", str);
> -            goto fail;
> -        }
> -        addr->ipv4 = addr->has_ipv4 = true;
>      } else {
> -        /* hostname */
> +        /* hostname or IPv4 addr */
>          if (2 != sscanf(str, "%64[^:]:%32[^,]%n", host, port, &pos)) {
>              error_setg(errp, "error parsing address '%s'", str);
>              goto fail;
>          }
> +        if (strcspn(host, "0123456789.") == 0) {

I think what you want here is:

        if (host[strspn(host, "0123456789.")] == '\0') {

Otherwise, you're still basically testing

	qemu_isdigit(str[0]) || str[0] == '.'

Paolo

> +            addr->ipv4 = addr->has_ipv4 = true;
> +        }
>      }
>  
>      addr->host = g_strdup(host);
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI
  2013-06-18 10:52 [Qemu-devel] [PULL 0/2] NBD changes for 2013-06-18 (including 1.5.1 patches) Paolo Bonzini
@ 2013-06-18 10:52 ` Paolo Bonzini
  0 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2013-06-18 10:52 UTC (permalink / raw)
  To: qemu-devel; +Cc: Ján Tomko, mdroth, qemu-stable

From: Ján Tomko <jtomko@redhat.com>

Otherwise they would get passed to getaddrinfo and fail with:
address resolution failed for [::1]:1234: Name or service not known

(Broken by commit v1.4.0-736-gf17c90b)

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/nbd.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/block/nbd.c b/block/nbd.c
index 30e3b78..9c480b8 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -118,13 +118,22 @@ static int nbd_parse_uri(const char *filename, QDict *options)
         }
         qdict_put(options, "path", qstring_from_str(qp->p[0].value));
     } else {
+        QString *host;
         /* nbd[+tcp]://host[:port]/export */
         if (!uri->server) {
             ret = -EINVAL;
             goto out;
         }
 
-        qdict_put(options, "host", qstring_from_str(uri->server));
+        /* strip braces from literal IPv6 address */
+        if (uri->server[0] == '[') {
+            host = qstring_from_substr(uri->server, 1,
+                                       strlen(uri->server) - 2);
+        } else {
+            host = qstring_from_str(uri->server);
+        }
+
+        qdict_put(options, "host", host);
         if (uri->port) {
             char* port_str = g_strdup_printf("%d", uri->port);
             qdict_put(options, "port", qstring_from_str(port_str));
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit
  2013-06-18  9:42   ` Paolo Bonzini
@ 2013-06-18 11:29     ` Ján Tomko
  0 siblings, 0 replies; 10+ messages in thread
From: Ján Tomko @ 2013-06-18 11:29 UTC (permalink / raw)
  To: Paolo Bonzini; +Cc: qemu-devel

On 06/18/2013 11:42 AM, Paolo Bonzini wrote:
> Il 03/06/2013 17:54, Ján Tomko ha scritto:
>> According to RFC 1123 [1], hostnames can start with a digit too.
>>
>> [1] http://tools.ietf.org/html/rfc1123#page-13
>>
>> Signed-off-by: Ján Tomko <jtomko@redhat.com>
>> ---

>>      } else {
>> -        /* hostname */
>> +        /* hostname or IPv4 addr */
>>          if (2 != sscanf(str, "%64[^:]:%32[^,]%n", host, port, &pos)) {
>>              error_setg(errp, "error parsing address '%s'", str);
>>              goto fail;
>>          }
>> +        if (strcspn(host, "0123456789.") == 0) {
> 
> I think what you want here is:
> 
>         if (host[strspn(host, "0123456789.")] == '\0') {
> 

Yes, thank you for catching that.

Jan

> Otherwise, you're still basically testing
> 
> 	qemu_isdigit(str[0]) || str[0] == '.'
> 
> Paolo
> 
>> +            addr->ipv4 = addr->has_ipv4 = true;
>> +        }
>>      }
>>  
>>      addr->host = g_strdup(host);
>>
> 
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI
  2013-06-18 14:14 [Qemu-devel] [PULL 0/2] NBD changes for 2013-06-18 (including 1.5.1 patches) Paolo Bonzini
@ 2013-06-18 14:14 ` Paolo Bonzini
  0 siblings, 0 replies; 10+ messages in thread
From: Paolo Bonzini @ 2013-06-18 14:14 UTC (permalink / raw)
  To: qemu-devel; +Cc: Ján Tomko, qemu-stable

From: Ján Tomko <jtomko@redhat.com>

Otherwise they would get passed to getaddrinfo and fail with:
address resolution failed for [::1]:1234: Name or service not known

(Broken by commit v1.4.0-736-gf17c90b)

Signed-off-by: Ján Tomko <jtomko@redhat.com>
Cc: qemu-stable@nongnu.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 block/nbd.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/block/nbd.c b/block/nbd.c
index 30e3b78..9c480b8 100644
--- a/block/nbd.c
+++ b/block/nbd.c
@@ -118,13 +118,22 @@ static int nbd_parse_uri(const char *filename, QDict *options)
         }
         qdict_put(options, "path", qstring_from_str(qp->p[0].value));
     } else {
+        QString *host;
         /* nbd[+tcp]://host[:port]/export */
         if (!uri->server) {
             ret = -EINVAL;
             goto out;
         }
 
-        qdict_put(options, "host", qstring_from_str(uri->server));
+        /* strip braces from literal IPv6 address */
+        if (uri->server[0] == '[') {
+            host = qstring_from_substr(uri->server, 1,
+                                       strlen(uri->server) - 2);
+        } else {
+            host = qstring_from_str(uri->server);
+        }
+
+        qdict_put(options, "host", host);
         if (uri->port) {
             char* port_str = g_strdup_printf("%d", uri->port);
             qdict_put(options, "port", qstring_from_str(port_str));
-- 
1.8.1.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2013-06-18 14:14 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-03 15:54 [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Ján Tomko
2013-06-03 15:54 ` [Qemu-devel] [PATCH 1/2] qemu-socket: allow hostnames starting with a digit Ján Tomko
2013-06-18  9:42   ` Paolo Bonzini
2013-06-18 11:29     ` Ján Tomko
2013-06-03 15:54 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Ján Tomko
2013-06-04 21:27   ` Paolo Bonzini
2013-06-13 14:55     ` Ján Tomko
2013-06-03 20:15 ` [Qemu-devel] [PATCH 0/2] Fix NBD hostname parsing issues Paolo Bonzini
  -- strict thread matches above, loose matches on Subject: below --
2013-06-18 10:52 [Qemu-devel] [PULL 0/2] NBD changes for 2013-06-18 (including 1.5.1 patches) Paolo Bonzini
2013-06-18 10:52 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Paolo Bonzini
2013-06-18 14:14 [Qemu-devel] [PULL 0/2] NBD changes for 2013-06-18 (including 1.5.1 patches) Paolo Bonzini
2013-06-18 14:14 ` [Qemu-devel] [PATCH 2/2] nbd: strip braces from literal IPv6 address in URI Paolo Bonzini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).