grub2/0190-editenv-handle-relative-symlinks.patch
Javier Martinez Canillas afb0baacd6
Use BLS fragment filename as menu entry id and for sort criterion
The BLS config filenames are guaranteed to be unique, so they can be
used as GRUB2 entry id and can also be used to sort the menu entries.

Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
2018-07-02 17:33:09 +02:00

53 lines
1.3 KiB
Diff

From 098987b7b5fcc15a5ba3600fa132fcec36095c5a Mon Sep 17 00:00:00 2001
From: Jonathan Lebon <jlebon@redhat.com>
Date: Mon, 14 Aug 2017 14:37:20 -0400
Subject: [PATCH 190/250] editenv: handle relative symlinks
Handle symlinks with targets relative to the containing dir. This
ensures that the rename operation does not depend on the cwd.
Resolves: rhbz#1479960
Signed-off-by: Jonathan Lebon <jlebon@redhat.com>
---
util/editenv.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/util/editenv.c b/util/editenv.c
index d8d1dad6ab9..41bc7cb1c9a 100644
--- a/util/editenv.c
+++ b/util/editenv.c
@@ -28,6 +28,7 @@
#include <errno.h>
#include <string.h>
+#include <libgen.h>
#define DEFAULT_ENVBLK_SIZE 1024
@@ -87,9 +88,20 @@ grub_util_create_envblk_file (const char *name)
continue;
}
- free (rename_target);
linkbuf[retsize] = '\0';
- rename_target = linkbuf;
+ if (linkbuf[0] == '/')
+ {
+ free (rename_target);
+ rename_target = linkbuf;
+ }
+ else
+ {
+ char *dbuf = xstrdup (rename_target);
+ const char *dir = dirname (dbuf);
+ free (rename_target);
+ rename_target = xasprintf("%s/%s", dir, linkbuf);
+ free (dbuf);
+ }
}
int rc = grub_util_rename (namenew, rename_target);
--
2.17.1