- /etc/system-release is symlink
- closes trac#951

Signed-off-by: Jakub Filak <[email protected]>
---
 src/include/dump_dir.h | 4 +++-
 src/lib/dump_dir.c     | 8 ++++----
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/include/dump_dir.h b/src/include/dump_dir.h
index 4f6a73e..89c7ff7 100644
--- a/src/include/dump_dir.h
+++ b/src/include/dump_dir.h
@@ -32,7 +32,9 @@ extern "C" {
 enum {
     DD_FAIL_QUIETLY_ENOENT = (1 << 0),
     DD_FAIL_QUIETLY_EACCES = (1 << 1),
-    DD_OPEN_READONLY = (1 << 2),
+    /* Open symlinks. dd_* funcs don't open symlinks by default */
+    DD_OPEN_FOLLOW = (1 << 2),
+    DD_OPEN_READONLY = (1 << 3),
 };
 
 struct dump_dir {
diff --git a/src/lib/dump_dir.c b/src/lib/dump_dir.c
index 5118860..dfa19aa 100644
--- a/src/lib/dump_dir.c
+++ b/src/lib/dump_dir.c
@@ -608,15 +608,15 @@ void dd_create_basic_files(struct dump_dir *dd, uid_t 
uid, const char *chroot_di
     if (!release)
     {
         release = load_text_file("/etc/system-release",
-                DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE);
+                DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE | DD_OPEN_FOLLOW);
         if (!release)
-            release = load_text_file("/etc/redhat-release", /*flags:*/ 0);
+            release = load_text_file("/etc/redhat-release", DD_OPEN_FOLLOW);
         dd_save_text(dd, FILENAME_OS_RELEASE, release);
         if (chroot_dir)
         {
             free(release);
             char *chrooted_name = concat_path_file(chroot_dir, 
"/etc/system-release");
-            release = load_text_file(chrooted_name, /*flags:*/ 0);
+            release = load_text_file(chrooted_name, DD_OPEN_FOLLOW);
             free(chrooted_name);
             if (release[0])
                 dd_save_text(dd, FILENAME_OS_RELEASE_IN_ROOTDIR, release);
@@ -762,7 +762,7 @@ int dd_delete(struct dump_dir *dd)
 
 static char *load_text_file(const char *path, unsigned flags)
 {
-    int fd = open(path, O_RDONLY | O_NOFOLLOW);
+    int fd = open(path, O_RDONLY | ((flags & DD_OPEN_FOLLOW) ? 0 : 
O_NOFOLLOW));
     if (fd == -1)
     {
         if (!(flags & DD_FAIL_QUIETLY_ENOENT))
-- 
1.7.11.7

Reply via email to