Return proper error when it is impossible to change quota flags
authorAlexander Bokovoy <ab@samba.org>
Thu, 31 Jul 2003 17:08:38 +0000 (17:08 +0000)
committerAlexander Bokovoy <ab@samba.org>
Thu, 31 Jul 2003 17:08:38 +0000 (17:08 +0000)
(This used to be commit 44bae9da9e03a1df738367f8d86adb0f315da41f)

source3/lib/sysquotas.c

index c5575ef5aadfb5bc01fe93ba0ae621caa2047ecd..617f624daea5ccafba9682e32f063d572ff151fe 100644 (file)
@@ -122,6 +122,7 @@ static int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_
 {
        int ret = -1;
        uint32 qflags = 0;
+       uint32 oldqflags = 0;
        struct SYS_DQBLK D;
        SMB_BIG_UINT bsize = (SMB_BIG_UINT)QUOTABLOCK_SIZE;
 
@@ -196,7 +197,17 @@ static int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_
                        DEBUG(0,("vfs_fs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
                                ret,errno,strerror(errno),id.uid,bdev));
 #else
-                       ret = 0;
+                       id.uid = getuid();
+
+                       if ((ret = quotactl(QCMD(Q_GETQUOTA,USRQUOTA), bdev, id.uid, (CADDR_T)&D))==0) {
+                               oldqflags |= QUOTAS_DENY_DISK;
+                       }
+
+                       if (oldqflags == qflags) {
+                               ret = 0;
+                       } else {
+                               ret = -1;
+                       }
 #endif
                        break;
 #ifdef HAVE_GROUP_QUOTA
@@ -243,7 +254,17 @@ static int sys_set_vfs_quota(const char *path, const char *bdev, enum SMB_QUOTA_
                        DEBUG(0,("vfs_fs_quota: ret(%d) errno(%d)[%s] uid(%d) bdev[%s]\n",
                                ret,errno,strerror(errno),id.gid,bdev));
 #else
-                       ret = 0;
+                       id.gid = getgid();
+
+                       if ((ret = quotactl(QCMD(Q_GETQUOTA,GRPQUOTA), bdev, id.gid, (CADDR_T)&D))==0) {
+                               oldqflags |= QUOTAS_DENY_DISK;
+                       }
+
+                       if (oldqflags == qflags) {
+                               ret = 0;
+                       } else {
+                               ret = -1;
+                       }
 #endif
                        break;
 #endif /* HAVE_GROUP_QUOTA */