2d3b65
From d8f8f4d637ce43f8699ba94c9b7648beda0ca174 Mon Sep 17 00:00:00 2001
2d3b65
From: Ondrej Holy <oholy@redhat.com>
2d3b65
Date: Thu, 23 May 2019 10:41:53 +0200
2d3b65
Subject: [PATCH] gfile: Limit access to files when copying
2d3b65
2d3b65
file_copy_fallback creates new files with default permissions and
2d3b65
set the correct permissions after the operation is finished. This
2d3b65
might cause that the files can be accessible by more users during
2d3b65
the operation than expected. Use G_FILE_CREATE_PRIVATE for the new
2d3b65
files to limit access to those files.
2d3b65
---
2d3b65
 gio/gfile.c | 11 ++++++-----
2d3b65
 1 file changed, 6 insertions(+), 5 deletions(-)
2d3b65
2d3b65
diff --git a/gio/gfile.c b/gio/gfile.c
2d3b65
index 24b136d80..74b58047c 100644
2d3b65
--- a/gio/gfile.c
2d3b65
+++ b/gio/gfile.c
2d3b65
@@ -3284,12 +3284,12 @@ file_copy_fallback (GFile                  *source,
2d3b65
         out = (GOutputStream*)_g_local_file_output_stream_replace (_g_local_file_get_filename (G_LOCAL_FILE (destination)),
2d3b65
                                                                    FALSE, NULL,
2d3b65
                                                                    flags & G_FILE_COPY_BACKUP,
2d3b65
-                                                                   G_FILE_CREATE_REPLACE_DESTINATION,
2d3b65
-                                                                   info,
2d3b65
+                                                                   G_FILE_CREATE_REPLACE_DESTINATION |
2d3b65
+                                                                   G_FILE_CREATE_PRIVATE, info,
2d3b65
                                                                    cancellable, error);
2d3b65
       else
2d3b65
         out = (GOutputStream*)_g_local_file_output_stream_create (_g_local_file_get_filename (G_LOCAL_FILE (destination)),
2d3b65
-                                                                  FALSE, 0, info,
2d3b65
+                                                                  FALSE, G_FILE_CREATE_PRIVATE, info,
2d3b65
                                                                   cancellable, error);
2d3b65
     }
2d3b65
   else if (flags & G_FILE_COPY_OVERWRITE)
2d3b65
@@ -3297,12 +3297,13 @@ file_copy_fallback (GFile                  *source,
2d3b65
       out = (GOutputStream *)g_file_replace (destination,
2d3b65
                                              NULL,
2d3b65
                                              flags & G_FILE_COPY_BACKUP,
2d3b65
-                                             G_FILE_CREATE_REPLACE_DESTINATION,
2d3b65
+                                             G_FILE_CREATE_REPLACE_DESTINATION |
2d3b65
+                                             G_FILE_CREATE_PRIVATE,
2d3b65
                                              cancellable, error);
2d3b65
     }
2d3b65
   else
2d3b65
     {
2d3b65
-      out = (GOutputStream *)g_file_create (destination, 0, cancellable, error);
2d3b65
+      out = (GOutputStream *)g_file_create (destination, G_FILE_CREATE_PRIVATE, cancellable, error);
2d3b65
     }
2d3b65
 
2d3b65
   if (!out)
2d3b65
-- 
2d3b65
2.21.0
2d3b65