r5822: Actually return an error message if disk_free fails ! Pointed out by Ying...
authorJeremy Allison <jra@samba.org>
Wed, 16 Mar 2005 01:41:21 +0000 (01:41 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 15:56:03 +0000 (10:56 -0500)
Jeremy.
(This used to be commit b5d31b2caf5c4739607bf57cb7e4e0569b57012b)

source3/smbd/dfree.c
source3/smbd/reply.c
source3/smbd/trans2.c

index c556c8c8ab234f2f7d9fcaa701b684bab65bf524..81a48b94fcc7dde587107a1f33a6e4cba8184d15 100644 (file)
@@ -115,10 +115,19 @@ static SMB_BIG_UINT disk_free(const char *path, BOOL small_query,
                } else {
                        DEBUG (0, ("disk_free: sys_popen() failed for command %s. Error was : %s\n",
                                syscmd, strerror(errno) ));
-                       sys_fsusage(path, dfree, dsize);
+                       if (sys_fsusage(path, dfree, dsize) != 0) {
+                               DEBUG (0, ("disk_free: sys_fsusage() failed. Error was : %s\n",
+                                       strerror(errno) ));
+                               return (SMB_BIG_UINT)-1;
+                       }
+               }
+       } else {
+               if (sys_fsusage(path, dfree, dsize) != 0) {
+                       DEBUG (0, ("disk_free: sys_fsusage() failed. Error was : %s\n",
+                               strerror(errno) ));
+                       return (SMB_BIG_UINT)-1;
                }
-       } else
-               sys_fsusage(path, dfree, dsize);
+       }
 
        if (disk_quotas(path, &bsize_q, &dfree_q, &dsize_q)) {
                (*bsize) = bsize_q;
index 326dafd678caeb3966d3e91da9d16e9741161c2d..e8ee9ffe92067dd9d7783aa821a1945213453d4f 100644 (file)
@@ -751,7 +751,10 @@ int reply_dskattr(connection_struct *conn, char *inbuf,char *outbuf, int dum_siz
        SMB_BIG_UINT dfree,dsize,bsize;
        START_PROFILE(SMBdskattr);
 
-       SMB_VFS_DISK_FREE(conn,".",True,&bsize,&dfree,&dsize);
+       if (SMB_VFS_DISK_FREE(conn,".",True,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
+               END_PROFILE(SMBdskattr);
+               return(UNIXERROR(ERRHRD,ERRgeneral));
+       }
   
        outsize = set_message(outbuf,5,0,True);
        
index 54234deb35addd19a09e0ce38132239d1af58889..e4e1243d68ecec7ea1143fcdbcdf23a4fcaea9c0 100644 (file)
@@ -1785,7 +1785,10 @@ static int call_trans2qfsinfo(connection_struct *conn, char *inbuf, char *outbuf
                {
                        SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
                        data_len = 18;
-                       SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize); 
+                       if (SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
+                               return(UNIXERROR(ERRHRD,ERRgeneral));
+                       }
+
                        block_size = lp_block_size(snum);
                        if (bsize < block_size) {
                                SMB_BIG_UINT factor = block_size/bsize;
@@ -1877,7 +1880,9 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)st.st_dev, (unsi
                {
                        SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
                        data_len = 24;
-                       SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize);
+                       if (SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
+                               return(UNIXERROR(ERRHRD,ERRgeneral));
+                       }
                        block_size = lp_block_size(snum);
                        if (bsize < block_size) {
                                SMB_BIG_UINT factor = block_size/bsize;
@@ -1907,7 +1912,9 @@ cBytesSector=%u, cUnitTotal=%u, cUnitAvail=%d\n", (unsigned int)bsize, (unsigned
                {
                        SMB_BIG_UINT dfree,dsize,bsize,block_size,sectors_per_unit,bytes_per_sector;
                        data_len = 32;
-                       SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize);
+                       if (SMB_VFS_DISK_FREE(conn,".",False,&bsize,&dfree,&dsize) == (SMB_BIG_UINT)-1) {
+                               return(UNIXERROR(ERRHRD,ERRgeneral));
+                       }
                        block_size = lp_block_size(snum);
                        if (bsize < block_size) {
                                SMB_BIG_UINT factor = block_size/bsize;