diff options
author | Thomas Haller <thaller@redhat.com> | 2019-12-10 14:58:29 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2019-12-11 10:05:00 +0100 |
commit | 0c6cd07ec81d1bd5584549bef72c30adc8c79c9f (patch) | |
tree | 8b4b257753864aad930d90815ee56a0a0f41ee5d | |
parent | ce1f9e6eb9e4aa72e9954d58d20ca11634f6fd92 (diff) | |
download | NetworkManager-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.c | 21 |
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 |