[tracker] tracker-writeback: Preserve file permissions



commit 16fe51de1e93016a122ab089b0e0201c18de7ebc
Author: Philip Van Hoof <philip codeminded be>
Date:   Wed Nov 9 12:56:59 2011 +0100

    tracker-writeback: Preserve file permissions
    
    Fixes NB#289953.

 src/tracker-writeback/tracker-writeback-file.c |   16 ++++++++++++----
 1 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/src/tracker-writeback/tracker-writeback-file.c b/src/tracker-writeback/tracker-writeback-file.c
index 652169b..f00d668 100644
--- a/src/tracker-writeback/tracker-writeback-file.c
+++ b/src/tracker-writeback/tracker-writeback-file.c
@@ -239,11 +239,10 @@ tracker_writeback_file_update_metadata (TrackerWriteback         *writeback,
 	/* Copy to a temporary file so we can perform an atomic write on move */
 	tmp_file = create_temporary_file (file, file_info, &n_error);
 
-	g_object_unref (file_info);
-
 	if (!tmp_file) {
 		g_object_unref (file);
 		g_propagate_error (error, n_error);
+		g_object_unref (file_info);
 		return FALSE;
 	}
 
@@ -258,12 +257,21 @@ tracker_writeback_file_update_metadata (TrackerWriteback         *writeback,
 		/* Delete the temporary file and preserve original */
 		g_file_delete (tmp_file, NULL, NULL);
 	} else {
+		GError *m_error = NULL;
 		/* Move back the modified file to the original location */
 		g_file_move (tmp_file, file,
-			     G_FILE_COPY_OVERWRITE,
-			     NULL, NULL, NULL, NULL);
+		             G_FILE_COPY_OVERWRITE,
+		             NULL, NULL, NULL, NULL);
+		/* Set file attributes on tmp_file using file_info of original file */
+		g_file_set_attributes_from_info (tmp_file, file_info, 0, NULL, &m_error);
+		if (m_error) {
+			g_warning ("Can't restore permissions of original file for %s",
+			           row[0]);
+			g_error_free (m_error);
+		}
 	}
 
+	g_object_unref (file_info);
 	g_object_unref (tmp_file);
 	g_object_unref (file);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]