From: Jeremy Allison Date: Thu, 25 Dec 2008 20:12:22 +0000 (-0800) Subject: Fix bug #5990 - strict allocate should be checked before ftruncate X-Git-Tag: samba-3.3.0~131 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=40e57e35b21e37a88c2485d72f4323cc0a71e663;p=thirdparty%2Fsamba.git Fix bug #5990 - strict allocate should be checked before ftruncate reported by and based on a patch by Yasuma Takeda . Jeremy. (cherry picked from commit 60707022622068dd5df5c7b5aa82e0d34ed544f5) --- diff --git a/source/modules/vfs_default.c b/source/modules/vfs_default.c index 09ad3cb8e47..d306b0f8481 100644 --- a/source/modules/vfs_default.c +++ b/source/modules/vfs_default.c @@ -714,6 +714,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))){ + SMB_BIG_UINT space_avail; + SMB_BIG_UINT bsize,dfree,dsize; + + space_avail = get_dfree_info(fsp->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;