c187a1fb73
- Add 0001-gvdb-Restore-permissions-on-changed-files.patch: 'dconf update' writes new contents into temporary file and renames it to the original one, resulting permission inconsistencies if umask has been changed before that. The patch restores the changed permissions (bsc#971074, bgo#758066). OBS-URL: https://build.opensuse.org/request/show/420585 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/dconf?expand=0&rev=91
50 lines
1.3 KiB
Diff
50 lines
1.3 KiB
Diff
From 4e303b094dc2b6c53739fb65f0e6e9f508a8f99c Mon Sep 17 00:00:00 2001
|
|
From: Marek Kasik <mkasik@redhat.com>
|
|
Date: Fri, 13 Nov 2015 17:22:31 +0100
|
|
Subject: [PATCH] gvdb: Restore permissions on changed files
|
|
|
|
Restore permissions of files changed in gvdb_table_write_contents().
|
|
Since g_file_set_contents() doesn't preserve permissions it can happen
|
|
that if user calling e.g. "dconf update" has umask set then
|
|
the originally readable file becomes unreadable.
|
|
---
|
|
gvdb/gvdb-builder.c | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
diff --git a/gvdb/gvdb-builder.c b/gvdb/gvdb-builder.c
|
|
index 90ea50b..a185cb3 100644
|
|
--- a/gvdb/gvdb-builder.c
|
|
+++ b/gvdb/gvdb-builder.c
|
|
@@ -21,6 +21,7 @@
|
|
#include "gvdb-format.h"
|
|
|
|
#include <glib.h>
|
|
+#include <glib/gstdio.h>
|
|
#include <fcntl.h>
|
|
#if !defined(G_OS_WIN32) || !defined(_MSC_VER)
|
|
#include <unistd.h>
|
|
@@ -509,13 +510,20 @@ gvdb_table_write_contents (GHashTable *table,
|
|
gboolean status;
|
|
FileBuilder *fb;
|
|
GString *str;
|
|
+ GStatBuf buf;
|
|
+ gint stat_ret;
|
|
|
|
fb = file_builder_new (byteswap);
|
|
file_builder_add_hash (fb, table, &root);
|
|
str = file_builder_serialise (fb, root);
|
|
|
|
+ stat_ret = g_stat (filename, &buf);
|
|
+
|
|
status = g_file_set_contents (filename, str->str, str->len, error);
|
|
g_string_free (str, TRUE);
|
|
|
|
+ if (stat_ret == 0)
|
|
+ g_chmod (filename, buf.st_mode);
|
|
+
|
|
return status;
|
|
}
|
|
--
|
|
2.5.0
|
|
|