dovecot-2.2: quota-fs: Fixed getting NFS rquota when the quota w...

dovecot at dovecot.org dovecot at dovecot.org
Wed Dec 9 08:49:42 UTC 2015


details:   http://hg.dovecot.org/dovecot-2.2/rev/63706ee7f49e
changeset: 19494:63706ee7f49e
user:      Timo Sirainen <tss at iki.fi>
date:      Wed Dec 09 10:49:22 2015 +0200
description:
quota-fs: Fixed getting NFS rquota when the quota was disabled.

diffstat:

 src/plugins/quota/quota-fs.c |  35 +++++++++++++++++++----------------
 1 files changed, 19 insertions(+), 16 deletions(-)

diffs (73 lines):

diff -r 27ee6a472555 -r 63706ee7f49e src/plugins/quota/quota-fs.c
--- a/src/plugins/quota/quota-fs.c	Tue Dec 08 15:47:28 2015 +0200
+++ b/src/plugins/quota/quota-fs.c	Wed Dec 09 10:49:22 2015 +0200
@@ -316,6 +316,17 @@
 	return root->inode_per_mail ? resources_kb_messages : resources_kb;
 }
 
+#if defined(FS_QUOTA_LINUX) || defined(FS_QUOTA_BSDAIX) || \
+    defined(FS_QUOTA_NETBSD) || defined(HAVE_RQUOTA)
+static void fs_quota_root_disable(struct fs_quota_root *root, bool group)
+{
+	if (group)
+		root->group_disabled = TRUE;
+	else
+		root->user_disabled = TRUE;
+}
+#endif
+
 #ifdef HAVE_RQUOTA
 static void
 rquota_get_result(const rquota *rq,
@@ -430,7 +441,8 @@
 			i_debug("quota-fs: uid=%s, limit=unlimited",
 				dec2str(root->uid));
 		}
-		return 1;
+		fs_quota_root_disable(root, FALSE);
+		return 0;
 	case Q_EPERM:
 		i_error("quota-fs: permission denied to rquota service");
 		return -1;
@@ -525,7 +537,8 @@
 			i_debug("quota-fs: gid=%s, limit=unlimited",
 				dec2str(root->gid));
 		}
-		return 1;
+		fs_quota_root_disable(root, TRUE);
+		return 0;
 	case Q_EPERM:
 		i_error("quota-fs: permission denied to ext rquota service");
 		return -1;
@@ -541,17 +554,6 @@
 }
 #endif
 
-#if defined(FS_QUOTA_LINUX) || defined(FS_QUOTA_BSDAIX) || \
-    defined(FS_QUOTA_NETBSD)
-static void fs_quota_root_disable(struct fs_quota_root *root, bool group)
-{
-	if (group)
-		root->group_disabled = TRUE;
-	else
-		root->user_disabled = TRUE;
-}
-#endif
-
 #ifdef FS_QUOTA_LINUX
 static int
 fs_quota_get_linux(struct fs_quota_root *root, bool group,
@@ -869,9 +871,10 @@
 #ifdef HAVE_RQUOTA
 	if (mount_type_is_nfs(root->mount)) {
 		T_BEGIN {
-			ret = !root->user_disabled ?
-				do_rquota_user(root, &bytes_value, &bytes_limit, &count_value, &count_limit) :
-				do_rquota_group(root, &bytes_value, &bytes_limit, &count_value, &count_limit);
+			ret = root->user_disabled ? 0 :
+				do_rquota_user(root, &bytes_value, &bytes_limit, &count_value, &count_limit);
+			if (ret == 0 && !root->group_disabled)
+				ret = do_rquota_group(root, &bytes_value, &bytes_limit, &count_value, &count_limit);
 		} T_END;
 	} else
 #endif


More information about the dovecot-cvs mailing list