Mercurial > dovecot > core-2.2
changeset 19494:63706ee7f49e
quota-fs: Fixed getting NFS rquota when the quota was disabled.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 09 Dec 2015 10:49:22 +0200 |
parents | 27ee6a472555 |
children | 4535ac0b8ab1 |
files | src/plugins/quota/quota-fs.c |
diffstat | 1 files changed, 19 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- 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