qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] slirp/tftp.c: fix mode field
@ 2011-01-10 21:46 Sergei Gavrikov
  2011-01-12  7:22 ` [Qemu-devel] " Sergei Gavrikov
  0 siblings, 1 reply; 8+ messages in thread
From: Sergei Gavrikov @ 2011-01-10 21:46 UTC (permalink / raw)
  To: QEMU Developers

Hi,

According to RFC 1350 http://www.ietf.org/rfc/rfc1350.txt [Page 5]:

    The mode field contains the string "netascii", "octet", or "mail"
    (or any combination of upper and lower case, such as "NETASCII",
    NetAscii", etc.)

Unfortunately, current implementation of internal TFTP server breaks the
requests with the mode fields like "OCTET\0". For example, the RedBoot's
TFTP client sends the same (in upper case). So, it is not possible to
get internal TFTP working with RedBoot loader. If you do not have doubts
about STRCASECMP(3), a patch is provided.

Thanks,
Sergei

Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
---
 slirp/tftp.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/slirp/tftp.c b/slirp/tftp.c
index 55e4692..6ad1da0 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
     return;
   }
 
-  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
+  if (strcasecmp(&tp->x.tp_buf[k], "octet") != 0) {
       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
       return;
   }

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

* [Qemu-devel] Re: [PATCH] slirp/tftp.c: fix mode field
  2011-01-10 21:46 [Qemu-devel] [PATCH] slirp/tftp.c: fix mode field Sergei Gavrikov
@ 2011-01-12  7:22 ` Sergei Gavrikov
  2011-01-12  9:56   ` Stefan Hajnoczi
  0 siblings, 1 reply; 8+ messages in thread
From: Sergei Gavrikov @ 2011-01-12  7:22 UTC (permalink / raw)
  To: QEMU Developers

On Mon, 10 Jan 2011, Sergei Gavrikov wrote:
> According to RFC 1350 http://www.ietf.org/rfc/rfc1350.txt [Page 5]:
> 
>     The mode field contains the string "netascii", "octet", or "mail"
>     (or any combination of upper and lower case, such as "NETASCII",
>     NetAscii", etc.)
> 
> Unfortunately, current implementation of internal TFTP server breaks the
> requests with the mode fields like "OCTET\0". For example, the RedBoot's
> TFTP client sends the same (in upper case). So, it is not possible to
> get internal TFTP working with RedBoot loader. If you do not have doubts
> about STRCASECMP(3), a patch is provided.

... 

> diff --git a/slirp/tftp.c b/slirp/tftp.c
> index 55e4692..6ad1da0 100644
> --- a/slirp/tftp.c
> +++ b/slirp/tftp.c
> @@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
>      return;
>    }
>  
> -  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
> +  if (strcasecmp(&tp->x.tp_buf[k], "octet") != 0) {

The above adds a warning, renewed (no warning).

Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
---
 slirp/tftp.c |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/slirp/tftp.c b/slirp/tftp.c
index 55e4692..a455ad1 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
     return;
   }
 
-  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
+  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
       return;
   }

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

* Re: [Qemu-devel] Re: [PATCH] slirp/tftp.c: fix mode field
  2011-01-12  7:22 ` [Qemu-devel] " Sergei Gavrikov
@ 2011-01-12  9:56   ` Stefan Hajnoczi
  2011-01-12 10:22     ` Sergei Gavrikov
  0 siblings, 1 reply; 8+ messages in thread
From: Stefan Hajnoczi @ 2011-01-12  9:56 UTC (permalink / raw)
  To: Sergei Gavrikov; +Cc: QEMU Developers

On Wed, Jan 12, 2011 at 7:22 AM, Sergei Gavrikov
<sergei.gavrikov@gmail.com> wrote:
> diff --git a/slirp/tftp.c b/slirp/tftp.c
> index 55e4692..a455ad1 100644
> --- a/slirp/tftp.c
> +++ b/slirp/tftp.c
> @@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
>     return;
>   }
>
> -  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
> +  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
>       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
>       return;
>   }

According to RFC 2349 the "tsize" option is also case-insensitive.
Want to include a fix for that in this patch?

Stefan

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

* Re: [Qemu-devel] Re: [PATCH] slirp/tftp.c: fix mode field
  2011-01-12  9:56   ` Stefan Hajnoczi
@ 2011-01-12 10:22     ` Sergei Gavrikov
  2011-01-12 12:17       ` Stefan Hajnoczi
  0 siblings, 1 reply; 8+ messages in thread
From: Sergei Gavrikov @ 2011-01-12 10:22 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: QEMU Developers

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1763 bytes --]

On Wed, 12 Jan 2011, Stefan Hajnoczi wrote:

> On Wed, Jan 12, 2011 at 7:22 AM, Sergei Gavrikov
> <sergei.gavrikov@gmail.com> wrote:
> > diff --git a/slirp/tftp.c b/slirp/tftp.c
> > index 55e4692..a455ad1 100644
> > --- a/slirp/tftp.c
> > +++ b/slirp/tftp.c
> > @@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
> >     return;
> >   }
> >
> > -  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
> > +  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
> >       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
> >       return;
> >   }
> 
> According to RFC 2349 the "tsize" option is also case-insensitive.
> Want to include a fix for that in this patch?

It was good to know. If you mean the below I "merge" that in one. Thank
you for review.

Sergei

Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
Acked-by: Stefan Hajnoczi <stefanha@gmail.com>
----
 slirp/tftp.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/slirp/tftp.c b/slirp/tftp.c
index 55e4692..1821648 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
     return;
   }
 
-  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
+  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
       return;
   }
@@ -351,7 +351,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
       value = (const char *)&tp->x.tp_buf[k];
       k += strlen(value) + 1;
 
-      if (strcmp(key, "tsize") == 0) {
+      if (strcasecmp(key, "tsize") == 0) {
 	  int tsize = atoi(value);
 	  struct stat stat_p;
 

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

* Re: [Qemu-devel] Re: [PATCH] slirp/tftp.c: fix mode field
  2011-01-12 10:22     ` Sergei Gavrikov
@ 2011-01-12 12:17       ` Stefan Hajnoczi
  2011-01-12 12:32         ` Sergei Gavrikov
  2011-01-12 13:57         ` [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize Sergei Gavrikov
  0 siblings, 2 replies; 8+ messages in thread
From: Stefan Hajnoczi @ 2011-01-12 12:17 UTC (permalink / raw)
  To: Sergei Gavrikov; +Cc: QEMU Developers

On Wed, Jan 12, 2011 at 10:22 AM, Sergei Gavrikov
<sergei.gavrikov@gmail.com> wrote:
> It was good to know. If you mean the below I "merge" that in one. Thank
> you for review.
>
> Sergei
>
> Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
> Acked-by: Stefan Hajnoczi <stefanha@gmail.com>

Your new patch looks fine.  I prefer:
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

Stefan

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

* Re: [Qemu-devel] Re: [PATCH] slirp/tftp.c: fix mode field
  2011-01-12 12:17       ` Stefan Hajnoczi
@ 2011-01-12 12:32         ` Sergei Gavrikov
  2011-01-12 13:57         ` [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize Sergei Gavrikov
  1 sibling, 0 replies; 8+ messages in thread
From: Sergei Gavrikov @ 2011-01-12 12:32 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: QEMU Developers



On Wed, 12 Jan 2011, Stefan Hajnoczi wrote:

> On Wed, Jan 12, 2011 at 10:22 AM, Sergei Gavrikov
> <sergei.gavrikov@gmail.com> wrote:
> > It was good to know. If you mean the below I "merge" that in one. Thank
> > you for review.
> >
> > Sergei
> >
> > Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
> > Acked-by: Stefan Hajnoczi <stefanha@gmail.com>
> 
> Your new patch looks fine.  I prefer:
> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
> 
> Stefan

Excuse, please, that 'Acked-by'. I'm get it. Thank you!

Sergei

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

* [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize
  2011-01-12 12:17       ` Stefan Hajnoczi
  2011-01-12 12:32         ` Sergei Gavrikov
@ 2011-01-12 13:57         ` Sergei Gavrikov
  2011-01-13 10:40           ` Edgar E. Iglesias
  1 sibling, 1 reply; 8+ messages in thread
From: Sergei Gavrikov @ 2011-01-12 13:57 UTC (permalink / raw)
  To: Stefan Hajnoczi; +Cc: QEMU Developers

From: Sergei Gavrikov <sergei.gavrikov@gmail.com>

According to RFC 1350 (TFTP Revision 2) the mode field can contain any
combination of upper and lower case; also RFC 2349 propagates that the
transfer size option ("tsize") is case in-sensitive too.

Current implementation of embedded TFTP server missed that what does
mess some TFTP clients. Fixed by using STRCASECMP(3) in the required
places.

Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
---
 slirp/tftp.c |    4 ++--
 1 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/slirp/tftp.c b/slirp/tftp.c
index 55e4692..1821648 100644
--- a/slirp/tftp.c
+++ b/slirp/tftp.c
@@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
     return;
   }
 
-  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
+  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
       tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
       return;
   }
@@ -351,7 +351,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
       value = (const char *)&tp->x.tp_buf[k];
       k += strlen(value) + 1;
 
-      if (strcmp(key, "tsize") == 0) {
+      if (strcasecmp(key, "tsize") == 0) {
 	  int tsize = atoi(value);
 	  struct stat stat_p;
 

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

* Re: [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize
  2011-01-12 13:57         ` [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize Sergei Gavrikov
@ 2011-01-13 10:40           ` Edgar E. Iglesias
  0 siblings, 0 replies; 8+ messages in thread
From: Edgar E. Iglesias @ 2011-01-13 10:40 UTC (permalink / raw)
  To: Sergei Gavrikov; +Cc: Stefan Hajnoczi, QEMU Developers

On Wed, Jan 12, 2011 at 03:57:18PM +0200, Sergei Gavrikov wrote:
> From: Sergei Gavrikov <sergei.gavrikov@gmail.com>
> 
> According to RFC 1350 (TFTP Revision 2) the mode field can contain any
> combination of upper and lower case; also RFC 2349 propagates that the
> transfer size option ("tsize") is case in-sensitive too.
> 
> Current implementation of embedded TFTP server missed that what does
> mess some TFTP clients. Fixed by using STRCASECMP(3) in the required
> places.
> 
> Signed-off-by: Sergei Gavrikov <sergei.gavrikov@gmail.com>
> Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>

I've applied this, thanks both of you.

Cheers


> ---
>  slirp/tftp.c |    4 ++--
>  1 files changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/slirp/tftp.c b/slirp/tftp.c
> index 55e4692..1821648 100644
> --- a/slirp/tftp.c
> +++ b/slirp/tftp.c
> @@ -311,7 +311,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
>      return;
>    }
>  
> -  if (memcmp(&tp->x.tp_buf[k], "octet\0", 6) != 0) {
> +  if (strcasecmp((const char *)&tp->x.tp_buf[k], "octet") != 0) {
>        tftp_send_error(spt, 4, "Unsupported transfer mode", tp);
>        return;
>    }
> @@ -351,7 +351,7 @@ static void tftp_handle_rrq(Slirp *slirp, struct tftp_t *tp, int pktlen)
>        value = (const char *)&tp->x.tp_buf[k];
>        k += strlen(value) + 1;
>  
> -      if (strcmp(key, "tsize") == 0) {
> +      if (strcasecmp(key, "tsize") == 0) {
>  	  int tsize = atoi(value);
>  	  struct stat stat_p;
>  
> 

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

end of thread, other threads:[~2011-01-13 10:40 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-10 21:46 [Qemu-devel] [PATCH] slirp/tftp.c: fix mode field Sergei Gavrikov
2011-01-12  7:22 ` [Qemu-devel] " Sergei Gavrikov
2011-01-12  9:56   ` Stefan Hajnoczi
2011-01-12 10:22     ` Sergei Gavrikov
2011-01-12 12:17       ` Stefan Hajnoczi
2011-01-12 12:32         ` Sergei Gavrikov
2011-01-12 13:57         ` [Qemu-devel] [PATCHv1] slirp: Use strcasecmp() to check tftp mode, tsize Sergei Gavrikov
2011-01-13 10:40           ` Edgar E. Iglesias

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).