summaryrefslogtreecommitdiff
path: root/mail/dovecot2/patches/patch-src_plugins_quota_quota-fs.c
diff options
context:
space:
mode:
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.c56
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
+