Fix bug #5990 - strict allocate should be checked before ftruncate
authorJeremy Allison <jra@samba.org>
Thu, 25 Dec 2008 20:13:12 +0000 (12:13 -0800)
committerJeremy Allison <jra@samba.org>
Thu, 25 Dec 2008 20:13:12 +0000 (12:13 -0800)
reported by and based on a patch by Yasuma Takeda
<yasuma@osstech.co.jp>.
Jeremy.

source3/modules/vfs_default.c

index 8fa8f6ae0671bc51b9467dd2b078da702a8cf42b..d7f3922974381a2844a323872233c88a7c9b4d87 100644 (file)
@@ -740,6 +740,20 @@ static int strict_allocate_ftruncate(vfs_handle_struct *handle, files_struct *fs
        if (st.st_size > len)
                return sys_ftruncate(fsp->fh->fd, len);
 
+       /* available disk space is enough or not? */
+       if (lp_strict_allocate(SNUM(fsp->conn))){
+               uint64_t space_avail;
+               uint64_t bsize,dfree,dsize;
+
+               space_avail = get_dfree_info(conn,fsp->fsp_name,false,&bsize,&dfree,&dsize);
+               /* space_avail is 1k blocks */
+               if (space_avail == (SMB_BIG_UINT)-1 ||
+                               ((SMB_BIG_UINT)space_to_write/1024 > space_avail) ) {
+                       errno = ENOSPC;
+                       return -1;
+               }
+       }
+
        /* Write out the real space on disk. */
        if (SMB_VFS_LSEEK(fsp, st.st_size, SEEK_SET) != st.st_size)
                return -1;