source4/libcli: Only set ctemp set on success
authorSam Lang <sam.lang@inktank.com>
Mon, 22 Apr 2013 15:23:16 +0000 (10:23 -0500)
committerJeremy Allison <jra@samba.org>
Wed, 24 Apr 2013 21:58:43 +0000 (23:58 +0200)
If open fails ctemp.out.name probably won't be valid and strdup
will cause a segv.  Only set the path if open succeeds.

Signed-off-by: Sam Lang <sam.lang@inktank.com>
Reviewed-by: Volker Lendecke <Volker.Lendecke@SerNet.DE>
Reviewed-by: Jeremy Allison <jra@samba.org>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Wed Apr 24 23:58:44 CEST 2013 on sn-devel-104

source4/libcli/clifile.c

index f5e02dd458603ce1c4d12ee478fa1eb919813645..19288247c4467351f01e3a729b86460a87c17d55 100644 (file)
@@ -653,9 +653,10 @@ int smbcli_ctemp(struct smbcli_tree *tree, const char *path, char **tmp_path)
        union smb_open open_parms;
        TALLOC_CTX *mem_ctx;
        NTSTATUS status;
+       int ret = -1;
 
        mem_ctx = talloc_init("raw_open");
-       if (!mem_ctx) return -1;
+       if (!mem_ctx) return ret;
 
        open_parms.openx.level = RAW_OPEN_CTEMP;
        open_parms.ctemp.in.attrib = 0;
@@ -663,12 +664,12 @@ int smbcli_ctemp(struct smbcli_tree *tree, const char *path, char **tmp_path)
        open_parms.ctemp.in.write_time = 0;
 
        status = smb_raw_open(tree, mem_ctx, &open_parms);
-       if (tmp_path) {
-               *tmp_path = strdup(open_parms.ctemp.out.name);
-       }
-       talloc_free(mem_ctx);
        if (NT_STATUS_IS_OK(status)) {
-               return open_parms.ctemp.out.file.fnum;
+               if (tmp_path) {
+                       *tmp_path = strdup(open_parms.ctemp.out.name);
+               }
+               ret = open_parms.ctemp.out.file.fnum;
        }
-       return -1;
+       talloc_free(mem_ctx);
+       return ret;
 }