From ebd853c83ce0f03fa59d1672b86190406659d901 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 31 Dec 2020 09:12:43 +0100 Subject: do not use atomic write for configuration file, we may not have permissions to do this, also should not be necessary --- debian/gnunet.postrm | 14 +++++++++----- src/util/configuration.c | 48 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 41 insertions(+), 21 deletions(-) diff --git a/debian/gnunet.postrm b/debian/gnunet.postrm index 0aba484db..2c3887202 100644 --- a/debian/gnunet.postrm +++ b/debian/gnunet.postrm @@ -33,10 +33,6 @@ remove_gns() { } s/^(hosts:)(.*)/$1.remove($2)/e; ' /etc/nsswitch.conf - # remove the gns nsswitch plugins as well - rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2 - rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2 - rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2 } @@ -81,11 +77,19 @@ case "${1}" in delgroup --quiet --system --only-if-empty ${GNUNETDNS_GROUP} || true fi - rm -rf /var/log/gnunetd /var/lib/gnunet /etc/default/gnunet + rm -rf /var/log/gnunet.log /var/lib/gnunet /etc/default/gnunet ;; remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear) + if $_LIBNSSWITCH + then + rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns.so.2 + rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns4.so.2 + rm -rf /usr/lib/x86_64-linux-gnu/usr/libnss_gns6.so.2 + remove_gns + fi + ;; *) diff --git a/src/util/configuration.c b/src/util/configuration.c index ecdcb3d53..23e6ced98 100644 --- a/src/util/configuration.c +++ b/src/util/configuration.c @@ -543,23 +543,39 @@ GNUNET_CONFIGURATION_write (struct GNUNET_CONFIGURATION_Handle *cfg, } cfg_buf = GNUNET_CONFIGURATION_serialize (cfg, &size); - (void) GNUNET_DISK_directory_remove (fn); - if (GNUNET_OK != - GNUNET_DISK_fn_write (fn, - cfg_buf, - size, - GNUNET_DISK_PERM_USER_READ - | GNUNET_DISK_PERM_USER_WRITE - | GNUNET_DISK_PERM_GROUP_READ - | GNUNET_DISK_PERM_GROUP_WRITE)) { - GNUNET_free (fn); - GNUNET_free (cfg_buf); - LOG (GNUNET_ERROR_TYPE_WARNING, - "Writing configuration to file `%s' failed\n", - filename); - cfg->dirty = GNUNET_SYSERR; /* last write failed */ - return GNUNET_SYSERR; + struct GNUNET_DISK_FileHandle *h; + + h = GNUNET_DISK_file_open (fn, + GNUNET_DISK_OPEN_WRITE + | GNUNET_DISK_OPEN_TRUNCATE + | GNUNET_DISK_OPEN_CREATE, + GNUNET_DISK_PERM_USER_READ + | GNUNET_DISK_PERM_USER_WRITE + | GNUNET_DISK_PERM_GROUP_READ + | GNUNET_DISK_PERM_GROUP_WRITE); + if (NULL == h) + { + GNUNET_free (fn); + return GNUNET_SYSERR; + } + if (((ssize_t) size) != + GNUNET_DISK_file_write (h, + cfg_buf, + size)) + { + GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, + "write", + fn); + GNUNET_DISK_file_close (h); + (void) GNUNET_DISK_directory_remove (fn); + GNUNET_free (fn); + GNUNET_free (cfg_buf); + cfg->dirty = GNUNET_SYSERR; /* last write failed */ + return GNUNET_SYSERR; + } + GNUNET_assert (GNUNET_OK == + GNUNET_DISK_file_close (h)); } GNUNET_free (fn); GNUNET_free (cfg_buf); -- cgit v1.2.3