s3:client: Avoid a possible fd leak in do_get()
authorAndreas Schneider <asn@samba.org>
Thu, 9 Aug 2018 13:58:32 +0000 (15:58 +0200)
committerJeremy Allison <jra@samba.org>
Fri, 10 Aug 2018 23:49:16 +0000 (01:49 +0200)
Found by covscan.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=13567

Pair-Programmed-With: Justin Stephenson <jstephen@redhat.com>
Signed-off-by: Andreas Schneider <asn@samba.org>
Signed-off-by: Justin Stephenson <jstephen@redhat.com>
Reviewed-by: Jeremy Allison <jra@samba.org>
source3/client/client.c

index f112b8c4ac1b60769ca2e5262c1871b6b813bc4b..25ba01d62167072aec5e882ca5d9d83ba686e744 100644 (file)
@@ -1160,6 +1160,7 @@ static int do_get(const char *rname, const char *lname_in, bool reget)
                                start = lseek(handle, 0, SEEK_END);
                                if (start == -1) {
                                        d_printf("Error seeking local file\n");
+                                       close(handle);
                                        return 1;
                                }
                        }
@@ -1181,6 +1182,9 @@ static int do_get(const char *rname, const char *lname_in, bool reget)
                                      NULL);
                if(!NT_STATUS_IS_OK(status)) {
                        d_printf("getattrib: %s\n", nt_errstr(status));
+                       if (newhandle) {
+                               close(handle);
+                       }
                        return 1;
                }
        }
@@ -1193,6 +1197,9 @@ static int do_get(const char *rname, const char *lname_in, bool reget)
        if (!NT_STATUS_IS_OK(status)) {
                d_fprintf(stderr, "parallel_read returned %s\n",
                          nt_errstr(status));
+               if (newhandle) {
+                       close(handle);
+               }
                cli_close(targetcli, fnum);
                return 1;
        }