diff options
Diffstat (limited to 'mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c')
-rw-r--r-- | mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c b/mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c new file mode 100644 index 00000000000..08a9d259570 --- /dev/null +++ b/mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c @@ -0,0 +1,56 @@ +$NetBSD: patch-src_plugins_quota_quota-fs.c,v 1.3.2.1 2013/08/06 15:57:07 tron Exp $ + +fix support for NetBSD's libquota + +--- src/plugins/quota/quota-fs.c.orig 2013-02-26 09:42:04.000000000 +0100 ++++ src/plugins/quota/quota-fs.c 2013-08-06 01:00:32.000000000 +0200 +@@ -672,34 +672,38 @@ + { + struct quotakey qk; + struct quotaval qv; ++ struct quotahandle *qh; ++ int ret; + +- if (root->qh == NULL) { +- if ((root->qh = quota_open(root->mount->mount_path)) == NULL) { +- i_error("cannot open quota for %s: %m", +- root->mount->mount_path); +- fs_quota_root_disable(root, group); +- return 0; +- } +- } ++ if ((qh = quota_open(root->mount->mount_path)) == NULL) { ++ i_error("cannot open quota for %s: %m", ++ root->mount->mount_path); ++ fs_quota_root_disable(root, group); ++ return 0; ++ } + + qk.qk_idtype = group ? QUOTA_IDTYPE_GROUP : QUOTA_IDTYPE_USER; + qk.qk_id = group ? root->gid : root->uid; + qk.qk_objtype = bytes ? QUOTA_OBJTYPE_BLOCKS : QUOTA_OBJTYPE_FILES; + +- if (quota_get(root->qh, &qk, &qv) != 0) { ++ if (quota_get(qh, &qk, &qv) != 0) { + if (errno == ESRCH) { + fs_quota_root_disable(root, group); + return 0; + } + i_error("quotactl(Q_GETQUOTA, %s) failed: %m", + root->mount->mount_path); +- return -1; ++ ret = -1; ++ goto end; + } + + *value_r = qv.qv_usage * DEV_BSIZE; + *limit_r = qv.qv_softlimit * DEV_BSIZE; + +- return 1; ++ ret = 1; ++end: ++ quota_close(qh); ++ return ret; + } + #endif + |