You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
50 lines
1.3 KiB
50 lines
1.3 KiB
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
|
From: Jonathan Lebon <jlebon@redhat.com> |
|
Date: Mon, 14 Aug 2017 14:37:20 -0400 |
|
Subject: [PATCH] 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);
|
|
|