Juan José Villaplana Querol
2009-Jul-01 10:52 UTC
[Samba] Unix Extensions + ext3 quotas + df
Hi, Some time ago, I reported an issue (1) regarding to the "disk free" to Quotas mapping when Unix Extensions are enabled. The issue still persists in RHEL 5.3 (samba-3.0.33-3.7.el5). In the meanwhile I have found a workaround via the attached *ugly* patch, but an official solution would be appreciated. Best regards, Juanjo (1) https://bugzilla.samba.org/show_bug.cgi?id=5395 -- Juan Jos? Villaplana Querol/Servei d'Inform?tica/Universitat Jaume I Powered by Mutt [http://www.mutt.org/] Dilbert: ... and starting today, all passwords must contain letters, numbers, doodles, sign language and squirrel noises. -------------- next part -------------- *** source/smbd/trans2.c.orig 2008-11-18 16:37:41.000000000 +0100 --- source/smbd/trans2.c 2009-07-01 12:17:16.000000000 +0200 *************** *** 2583,2612 **** --- 2583,2642 ---- CIFS_UNIX_POSIX_PATH_OPERATIONS_CAP))); break; case SMB_QUERY_POSIX_FS_INFO: { int rc; vfs_statvfs_struct svfs; if (!lp_unix_extensions()) { return ERROR_NT(NT_STATUS_INVALID_LEVEL); } rc = SMB_VFS_STATVFS(conn, ".", &svfs); if (!rc) { + + { + SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector; + + if (get_dfree_info(conn,".",False,&bsize,&dfree,&dsize) != (SMB_BIG_UINT)-1) { + block_size = lp_block_size(snum); + if (bsize < block_size) { + SMB_BIG_UINT factor = block_size/bsize; + bsize = block_size; + dsize /= factor; + dfree /= factor; + } + if (bsize > block_size) { + SMB_BIG_UINT factor = bsize/block_size; + bsize = block_size; + dsize *= factor; + dfree *= factor; + } + bytes_per_sector = 512; + sectors_per_unit = bsize/bytes_per_sector; + + svfs.BlockSize = bsize; + svfs.TotalBlocks = dsize; + svfs.BlocksAvail = dfree; + svfs.UserBlocksAvail = dfree; + svfs.TotalFileNodes = 0; + svfs.FreeFileNodes = 0; + } + } + data_len = 56; SIVAL(pdata,0,svfs.OptimalTransferSize); SIVAL(pdata,4,svfs.BlockSize); SBIG_UINT(pdata,8,svfs.TotalBlocks); SBIG_UINT(pdata,16,svfs.BlocksAvail); SBIG_UINT(pdata,24,svfs.UserBlocksAvail); SBIG_UINT(pdata,32,svfs.TotalFileNodes); SBIG_UINT(pdata,40,svfs.FreeFileNodes); SBIG_UINT(pdata,48,svfs.FsIdentifier); DEBUG(5,("call_trans2qfsinfo : SMB_QUERY_POSIX_FS_INFO succsessful\n")); #ifdef EOPNOTSUPP } else if (rc == EOPNOTSUPP) { return ERROR_NT(NT_STATUS_INVALID_LEVEL); #endif /* EOPNOTSUPP */ } else {
Reasonably Related Threads
- smbclient and large file support
- [jra@samba.org: Patch to improve Samba write speeds on Linux ext3 with 3.2.x]
- [SAMBA-SECURITY] CVE-2007-0452: Potential DoS against smbd in Samba 3.0.6 - 3.0.23d
- [SAMBA-SECURITY] CVE-2007-0452: Potential DoS against smbd in Samba 3.0.6 - 3.0.23d
- samba sessions dying - NT_STATUS_INVALID_PARAMETER