diff mbox series

Allow colon in PXE bootfile URLs

Message ID CAAuZUxmfKRrcCyZyb7zM3uoZftcAxUZ3CtZ+8qQ5-D0zq9E4qg@mail.gmail.com
State Changes Requested
Delegated to: Ramon Fried
Headers show
Series Allow colon in PXE bootfile URLs | expand

Commit Message

Lyle Franklin Aug. 15, 2021, 11:43 a.m. UTC
From: Lyle Franklin <lylejfranklin@gmail.com>
Date: Sun, 15 Aug 2021 07:17:14 -0400
Subject: [PATCH] Allow colon in PXE bootfile URLs

- U-boot's PXE flow supports prefixing your bootfile name with an
  IP address to fetch from a server other than the DHCP server,
  e.g. `hostIPaddr:bootfilename`:

https://github.com/u-boot/u-boot/commit/a93907c43f847f076dd0e34ee3b69b5e8e6d0d29
- However, this breaks bootfile paths which contain a colon, e.g.
  `f0:ad:4e:10:1b:87/7/pxelinux.cfg/default`
- This patch checks whether the `hostIPaddr` prefix is a valid
  IP address before overriding the serverIP otherwise the whole
  bootfile path is preserved

Signed-off-by: Lyle Franklin <lylejfranklin@gmail.com>
---
 net/net.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Comments

Ramon Fried Sept. 14, 2021, 9:13 a.m. UTC | #1
On Sun, Aug 15, 2021 at 5:09 PM Lyle Franklin <lylejfranklin@gmail.com> wrote:
>
> From: Lyle Franklin <lylejfranklin@gmail.com>
> Date: Sun, 15 Aug 2021 07:17:14 -0400
> Subject: [PATCH] Allow colon in PXE bootfile URLs
>
> - U-boot's PXE flow supports prefixing your bootfile name with an
>   IP address to fetch from a server other than the DHCP server,
>   e.g. `hostIPaddr:bootfilename`:
>
> https://github.com/u-boot/u-boot/commit/a93907c43f847f076dd0e34ee3b69b5e8e6d0d29
> - However, this breaks bootfile paths which contain a colon, e.g.
>   `f0:ad:4e:10:1b:87/7/pxelinux.cfg/default`
> - This patch checks whether the `hostIPaddr` prefix is a valid
>   IP address before overriding the serverIP otherwise the whole
>   bootfile path is preserved
>
> Signed-off-by: Lyle Franklin <lylejfranklin@gmail.com>
> ---
>  net/net.c | 8 ++++++--
>  1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/net/net.c b/net/net.c
> index c2992a0908..30fc0a29d7 100644
> --- a/net/net.c
> +++ b/net/net.c
> @@ -1540,14 +1540,18 @@ int is_serverip_in_cmd(void)
>  int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len)
>  {
>   char *colon;
> + struct in_addr ip;
>
>   if (net_boot_file_name[0] == '\0')
>   return 0;
>
>   colon = strchr(net_boot_file_name, ':');
>   if (colon) {
> - if (ipaddr)
> - *ipaddr = string_to_ip(net_boot_file_name);
> + ip = string_to_ip(net_boot_file_name);
> + if (ipaddr && ip.s_addr)
> + *ipaddr = ip;
> + }
> + if (ip.s_addr) {
>   strncpy(filename, colon + 1, max_len);
>   } else {
>   strncpy(filename, net_boot_file_name, max_len);
> --
> 2.31.1
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Ramon Fried Sept. 14, 2021, 9:18 a.m. UTC | #2
On Tue, Sep 14, 2021 at 12:13 PM Ramon Fried <rfried.dev@gmail.com> wrote:
>
> On Sun, Aug 15, 2021 at 5:09 PM Lyle Franklin <lylejfranklin@gmail.com> wrote:
> >
> > From: Lyle Franklin <lylejfranklin@gmail.com>
> > Date: Sun, 15 Aug 2021 07:17:14 -0400
> > Subject: [PATCH] Allow colon in PXE bootfile URLs
> >
> > - U-boot's PXE flow supports prefixing your bootfile name with an
> >   IP address to fetch from a server other than the DHCP server,
> >   e.g. `hostIPaddr:bootfilename`:
> >
> > https://github.com/u-boot/u-boot/commit/a93907c43f847f076dd0e34ee3b69b5e8e6d0d29
> > - However, this breaks bootfile paths which contain a colon, e.g.
> >   `f0:ad:4e:10:1b:87/7/pxelinux.cfg/default`
> > - This patch checks whether the `hostIPaddr` prefix is a valid
> >   IP address before overriding the serverIP otherwise the whole
> >   bootfile path is preserved
> >
> > Signed-off-by: Lyle Franklin <lylejfranklin@gmail.com>
> > ---
> >  net/net.c | 8 ++++++--
> >  1 file changed, 6 insertions(+), 2 deletions(-)
> >
> > diff --git a/net/net.c b/net/net.c
> > index c2992a0908..30fc0a29d7 100644
> > --- a/net/net.c
> > +++ b/net/net.c
> > @@ -1540,14 +1540,18 @@ int is_serverip_in_cmd(void)
> >  int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len)
> >  {
> >   char *colon;
> > + struct in_addr ip;
> >
> >   if (net_boot_file_name[0] == '\0')
> >   return 0;
> >
> >   colon = strchr(net_boot_file_name, ':');
> >   if (colon) {
> > - if (ipaddr)
> > - *ipaddr = string_to_ip(net_boot_file_name);
> > + ip = string_to_ip(net_boot_file_name);
> > + if (ipaddr && ip.s_addr)
> > + *ipaddr = ip;
> > + }
> > + if (ip.s_addr) {
> >   strncpy(filename, colon + 1, max_len);
> >   } else {
> >   strncpy(filename, net_boot_file_name, max_len);
> > --
> > 2.31.1
> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

Patch doesn't apply, please rebase and resend.
Additionally, it looks like there is wrong indentation, please check
patch with checkpatch before resubmitting
Thanks,
Ramon
diff mbox series

Patch

diff --git a/net/net.c b/net/net.c
index c2992a0908..30fc0a29d7 100644
--- a/net/net.c
+++ b/net/net.c
@@ -1540,14 +1540,18 @@  int is_serverip_in_cmd(void)
 int net_parse_bootfile(struct in_addr *ipaddr, char *filename, int max_len)
 {
  char *colon;
+ struct in_addr ip;

  if (net_boot_file_name[0] == '\0')
  return 0;

  colon = strchr(net_boot_file_name, ':');
  if (colon) {
- if (ipaddr)
- *ipaddr = string_to_ip(net_boot_file_name);
+ ip = string_to_ip(net_boot_file_name);
+ if (ipaddr && ip.s_addr)
+ *ipaddr = ip;
+ }
+ if (ip.s_addr) {
  strncpy(filename, colon + 1, max_len);
  } else {
  strncpy(filename, net_boot_file_name, max_len);