From 0ca1681638fe91cbd6b1e4b712901be75d69f118 Mon Sep 17 00:00:00 2001 From: Christian Stimming Date: Sun, 21 Jul 2002 21:33:29 +0000 Subject: [PATCH] 2002-07-21 Christian Stimming * src/backend/file/gnc-backend-file.c: File permission fix by Matt Brubeck git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7121 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 5 +++++ src/backend/file/gnc-backend-file.c | 16 ++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/ChangeLog b/ChangeLog index e354eb09d7..2a733067f1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2002-07-21 Christian Stimming + + * src/backend/file/gnc-backend-file.c: File permission fix by Matt + Brubeck + 2002-07-11 Derek Atkins * change gncEntry->account into gncEntry->invAccount and diff --git a/src/backend/file/gnc-backend-file.c b/src/backend/file/gnc-backend-file.c index 8b4ce82bdf..b13d5b665a 100644 --- a/src/backend/file/gnc-backend-file.c +++ b/src/backend/file/gnc-backend-file.c @@ -626,6 +626,8 @@ gnc_file_be_write_to_file(FileBackend *be, gboolean make_backup) const gchar *datafile; char *tmp_name; GNCBook *book; + struct stat statbuf; + int rc; book = gnc_session_get_book (be->session); @@ -651,6 +653,20 @@ gnc_file_be_write_to_file(FileBackend *be, gboolean make_backup) if(gnc_book_write_to_xml_file_v2(book, tmp_name)) { + /* Record the file's permissions before unlinking it */ + rc = stat(datafile, &statbuf); + if(rc == 0) + { + /* Use the permissions from the original data file */ + if(chmod(tmp_name, statbuf.st_mode) != 0) + { + PWARN("unable to chmod filename %s: %s", + datafile ? datafile : "(null)", + strerror(errno) ? strerror(errno) : ""); + g_free(tmp_name); + return FALSE; + } + } if(unlink(datafile) != 0 && errno != ENOENT) { xaccBackendSetError((Backend*)be, ERR_BACKEND_MISC);