summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2019-12-10 14:58:29 +0100
committerThomas Haller <thaller@redhat.com>2019-12-11 10:05:00 +0100
commit0c6cd07ec81d1bd5584549bef72c30adc8c79c9f (patch)
tree8b4b257753864aad930d90815ee56a0a0f41ee5d
parentce1f9e6eb9e4aa72e9954d58d20ca11634f6fd92 (diff)
downloadNetworkManager-0c6cd07ec81d1bd5584549bef72c30adc8c79c9f.tar.gz
nm-manager: remove lease file if copying dhclient lease fails
- also use nm_auto_close and nm_close().
-rw-r--r--src/nm-manager.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c
index 493c665792..a900acbcd4 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -2698,26 +2698,29 @@ get_existing_connection (NMManager *self,
static gboolean
copy_lease (const char *src, const char *dst)
{
- int src_fd, dst_fd;
- ssize_t res, size = SSIZE_MAX;
+ nm_auto_close int src_fd = -1;
+ int dst_fd;
+ ssize_t res;
src_fd = open (src, O_RDONLY|O_CLOEXEC);
if (src_fd < 0)
return FALSE;
dst_fd = open (dst, O_CREAT|O_EXCL|O_CLOEXEC|O_WRONLY, 0644);
- if (dst_fd < 0) {
- close (src_fd);
+ if (dst_fd < 0)
return FALSE;
+
+ while ((res = sendfile (dst_fd, src_fd, NULL, G_MAXSSIZE)) > 0) {
}
- while ((res = sendfile (dst_fd, src_fd, NULL, size)) > 0)
- size -= res;
+ nm_close (dst_fd);
- close (src_fd);
- close (dst_fd);
+ if (res != 0) {
+ unlink (dst);
+ return FALSE;
+ }
- return !res;
+ return TRUE;
}
static gboolean