From: Peter Jones Date: Mon, 9 Jan 2023 18:30:37 -0500 Subject: efi/http: match protocol+hostname of boot url in root_url This lets you write config files that don't know urls. Signed-off-by: Peter Jones Signed-off-by: Robbie Harwood --- grub-core/net/efi/http.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/grub-core/net/efi/http.c b/grub-core/net/efi/http.c index 359231b..2ec458b 100644 --- a/grub-core/net/efi/http.c +++ b/grub-core/net/efi/http.c @@ -3,6 +3,7 @@ #include #include #include +#include static void http_configure (struct grub_efi_net_device *dev, int prefer_ip6) @@ -335,6 +336,24 @@ grub_efihttp_open (struct grub_efi_net_device *dev, grub_err_t err; grub_off_t size = 0; char *buf = NULL; + char *root_url; + grub_efi_ipv6_address_t address; + const char *rest; + + if (grub_efi_string_to_ip6_address (file->device->net->server, &address, &rest) && *rest == 0) + root_url = grub_xasprintf ("%s://[%s]", type ? "https" : "http", file->device->net->server); + else + root_url = grub_xasprintf ("%s://%s", type ? "https" : "http", file->device->net->server); + if (root_url) + { + grub_env_unset ("root_url"); + grub_env_set ("root_url", root_url); + grub_free (root_url); + } + else + { + return grub_errno; + } err = efihttp_request (dev->http, file->device->net->server, file->device->net->name, type, 1, 0); if (err != GRUB_ERR_NONE)