diff options
Diffstat (limited to 'backport-do-not-clear-current-working-url-when-executing-embedded-image.patch')
-rw-r--r-- | backport-do-not-clear-current-working-url-when-executing-embedded-image.patch | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/backport-do-not-clear-current-working-url-when-executing-embedded-image.patch b/backport-do-not-clear-current-working-url-when-executing-embedded-image.patch new file mode 100644 index 0000000..06b8081 --- /dev/null +++ b/backport-do-not-clear-current-working-url-when-executing-embedded-image.patch @@ -0,0 +1,56 @@ +From 5d22307c4161dde453d50e8dc7bef8b3a2f6c9b3 Mon Sep 17 00:00:00 2001 +From: Michael Brown <mcb30@ipxe.org> +Date: Tue, 15 Feb 2022 14:28:01 +0000 +Subject: [PATCH] [image] Do not clear current working URI when executing + embedded image + +Embedded images do not have an associated URI. This currently causes +the current working URI (cwuri) to be cleared when starting an +embedded image. + +If the current working URI has been set via a ${next-server} setting +from a cached DHCP packet then this will result in unexpected +behaviour. An attempt by the embedded script to use a relative URI to +download files from the TFTP server will fail with the error: + + Could not start download: Operation not supported (ipxe.org/3c092083) + +Rerunning the "dhcp" command will not fix this error, since the TFTP +settings applicator will not see any change to the ${next-server} +setting and so will not reset the current working URI. + +Fix by setting the current working URI to the image's URI only if the +image actually has an associated URI. + +Debugged-by: Ignat Korchagin <ignat@cloudflare.com> +Originally-fixed-by: Ignat Korchagin <ignat@cloudflare.com> +Tested-by: Ignat Korchagin <ignat@cloudflare.com> +Signed-off-by: Michael Brown <mcb30@ipxe.org> + +Conflict:NA +Reference:https://github.com/ipxe/ipxe/commit/5d22307c4161dde453d50e8dc7bef8b3a2f6c9b3 +--- + src/core/image.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/core/image.c b/src/core/image.c +index ce8cf868b0..3e236ca603 100644 +--- a/src/core/image.c ++++ b/src/core/image.c +@@ -338,9 +338,12 @@ int image_exec ( struct image *image ) { + /* Sanity check */ + assert ( image->flags & IMAGE_REGISTERED ); + +- /* Switch current working directory to be that of the image itself */ ++ /* Switch current working directory to be that of the image ++ * itself, if applicable ++ */ + old_cwuri = uri_get ( cwuri ); +- churi ( image->uri ); ++ if ( image->uri ) ++ churi ( image->uri ); + + /* Preserve record of any currently-running image */ + saved_current_image = current_image; + + |