r19260: Fix for bug #3524 from tiamat@komi.mts.ru - Solaris quotas.
authorJeremy Allison <jra@samba.org>
Fri, 13 Oct 2006 05:22:36 +0000 (05:22 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:15:26 +0000 (12:15 -0500)
Jeremy.
(This used to be commit ac510a90f3adf72b64a8e2a764b0500dcd223b3f)

source3/smbd/quotas.c

index 35bb94bcef64d0781304fd0ad5bd47565cd38435..bb88957731f1aa2c7a480176c6182eb39bf13786 100644 (file)
@@ -586,7 +586,6 @@ BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB
        int file;
        static struct mnttab mnt;
        static pstring name;
-       pstring devopt;
 #else /* SunOS4 */
        struct mntent *mnt;
        static pstring name;
@@ -603,7 +602,8 @@ BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB
                return(False) ;
   
        devno = sbuf.st_dev ;
-       DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n", path,(unsigned int)devno));
+       DEBUG(5,("disk_quotas: looking for path \"%s\" devno=%x\n",
+               path, (unsigned int)devno));
        if ( devno != devno_cached ) {
                devno_cached = devno ;
 #if defined(SUNOS5)
@@ -611,17 +611,19 @@ BOOL disk_quotas(const char *path, SMB_BIG_UINT *bsize, SMB_BIG_UINT *dfree, SMB
                        return(False) ;
     
                found = False ;
-               slprintf(devopt, sizeof(devopt) - 1, "dev=%x", (unsigned int)devno);
+
                while (getmntent(fd, &mnt) == 0) {
-                       if( !hasmntopt(&mnt, devopt) )
+                       if (sys_stat(mnt.mnt_mountp, &sbuf) == -1)
                                continue;
 
-                       DEBUG(5,("disk_quotas: testing \"%s\" %s\n", mnt.mnt_mountp,devopt));
+                       DEBUG(5,("disk_quotas: testing \"%s\" devno=%x\n",
+                               mnt.mnt_mountp, (unsigned int)devno));
 
                        /* quotas are only on vxfs, UFS or NFS */
-                       if ( strcmp( mnt.mnt_fstype, MNTTYPE_UFS ) == 0 ||
+                       if ( (sbuf.st_dev == devno) && (
+                               strcmp( mnt.mnt_fstype, MNTTYPE_UFS ) == 0 ||
                                strcmp( mnt.mnt_fstype, "nfs" ) == 0    ||
-                               strcmp( mnt.mnt_fstype, "vxfs" ) == 0  ) { 
+                               strcmp( mnt.mnt_fstype, "vxfs" ) == 0 )) { 
                                        found = True ;
                                        break;
                        }