Patch to have mailfront qmail backend evaluate QMAILQUEUE later

Scott Gifford <[email protected]> Wed, 16 Mar 2011 16:30:10 -0400
Newsgroups gmane.comp.sysutils.bgware
Message-ID <[email protected]>
--20cf307ca09caa61bb049e9f6b65
Content-Type: multipart/alternative; boundary=20cf307ca09caa61b6049e9f6b63

--20cf307ca09caa61b6049e9f6b63
Content-Type: text/plain; charset=ISO-8859-1

I had a project where I wanted to have particularly large messages handled
by a different qmail instance than my regular messages.

To do this, I wrote a plugin for smtpfront which counts recipients, message
size, then compares the product of these two against a limit.  If
(recipients * message_size > limit) it will use an alternate QMAILQUEUE,
which will handle the message differently.

Initially it didn't work because, even though my plugin forces smtpfront to
write to a temporary file, it was checking QMAILQUEUE during the SMTP DATA
command, before the message size was known and so before it could be
overridden.

This patch defers looking at QMAILQUEUE until it is necessary (at SMTP DATA
if there is no temporary file, or at the end of the message if there is a
temporary file).  It also consolidates the code a bit.

I have also included the plugin I wrote with this, in case it is helpful to
anybody.

Thanks,

------Scott.

--20cf307ca09caa61b6049e9f6b63
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

I had a project where I wanted to have particularly large messages handled =
by a different qmail instance than my regular messages.<div><br></div><div>=
To do this, I wrote a plugin for smtpfront which counts recipients, message=
 size, then compares the product of these two against a limit. =A0If (recip=
ients * message_size &gt; limit) it will use an alternate QMAILQUEUE, which=
 will handle the message differently.</div>

<div><br></div><div>Initially it didn&#39;t work because, even though my pl=
ugin forces smtpfront to write to a temporary file, it was checking QMAILQU=
EUE during the SMTP DATA command, before the message size was known and so =
before it could be overridden.</div>

<div><br></div><div>This patch defers looking at QMAILQUEUE until it is nec=
essary (at SMTP DATA if there is no temporary file, or at the end of the me=
ssage if there is a temporary file). =A0It also consolidates the code a bit=
.</div>

<div><br></div><div>I have also included the plugin I wrote with this, in c=
ase it is helpful to anybody.</div><div><br></div><div>Thanks,</div><div><b=
r></div><div>------Scott.</div><div><br></div><div><br></div>

--20cf307ca09caa61b6049e9f6b63--
--20cf307ca09caa61bb049e9f6b65
Content-Type: text/plain; charset=US-ASCII; 
	name="mailfront-1.18-backend-qmail-defer-qmailqueue.diff.txt"
Content-Disposition: attachment; 
	filename="mailfront-1.18-backend-qmail-defer-qmailqueue.diff.txt"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_glcpg02i1

LS0tIG1haWxmcm9udC0xLjE4L2JhY2tlbmQtcW1haWwuYwkyMDEwLTExLTE4IDE1OjI2OjQ3LjAw
MDAwMDAwMCAtMDUwMAorKysgbWFpbGZyb250LTEuMTgtc2cvYmFja2VuZC1xbWFpbC5jCTIwMTEt
MDEtMzEgMDE6MzM6NDQuMDAwMDAwMDAwIC0wNTAwCkBAIC01NiwxMSArNTYsMjAgQEAKICAgcmV0
dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3RhcnRfcXEoaW50IG1zZ2ZkLCBpbnQgZW52ZmQpCitz
dGF0aWMgY29uc3QgcmVzcG9uc2UgKnN0YXJ0X3FxKGludCBtc2dmZCwgaW50IGVudmZkKQogewor
ICBjb25zdCBjaGFyKiBxaDsKKworICBxcWFyZ3NbMF0gPSBzZXNzaW9uX2dldGVudigiUU1BSUxR
VUVVRSIpOworICBpZiAocXFhcmdzWzBdID09IDApIHFxYXJnc1swXSA9ICJiaW4vcW1haWwtcXVl
dWUiOworCisgIGlmICgocWggPSBzZXNzaW9uX2dldGVudigiUU1BSUxIT01FIikpID09IDApCisg
ICAgcWggPSBjb25mX3FtYWlsOworICBpZiAoY2hkaXIocWgpID09IC0xKSByZXR1cm4gJnJlc3Bf
bm9fY2hkaXI7CisKICAgaWYgKChxcXBpZCA9IGZvcmsoKSkgPT0gLTEpIHsKICAgICBjbG9zZV9x
cXBpcGUoKTsKLSAgICByZXR1cm4gLTE7CisgICAgcmV0dXJuICZyZXNwX25vX2Zvcms7CiAgIH0K
IAogICBpZiAocXFwaWQgPT0gMCkgewpAQCAtNzYsMTUgKzg1LDYgQEAKIAogc3RhdGljIGNvbnN0
IHJlc3BvbnNlKiBkYXRhX3N0YXJ0KGludCBmZCkKIHsKLSAgY29uc3QgY2hhciogcWg7Ci0KLSAg
cXFhcmdzWzBdID0gc2Vzc2lvbl9nZXRlbnYoIlFNQUlMUVVFVUUiKTsKLSAgaWYgKHFxYXJnc1sw
XSA9PSAwKSBxcWFyZ3NbMF0gPSAiYmluL3FtYWlsLXF1ZXVlIjsKLQotICBpZiAoKHFoID0gc2Vz
c2lvbl9nZXRlbnYoIlFNQUlMSE9NRSIpKSA9PSAwKQotICAgIHFoID0gY29uZl9xbWFpbDsKLSAg
aWYgKGNoZGlyKHFoKSA9PSAtMSkgcmV0dXJuICZyZXNwX25vX2NoZGlyOwotCiAgIHNpZ19waXBl
X2Jsb2NrKCk7CiAKICAgaWYgKHBpcGUocXFlcGlwZSkgPT0gLTEpIHJldHVybiAmcmVzcF9ub19w
aXBlOwpAQCAtOTQsOSArOTQsMTAgQEAKICAgICAgIGNsb3NlX3FxcGlwZSgpOwogICAgICAgcmV0
dXJuICZyZXNwX25vX3BpcGU7CiAgICAgfQotCi0gICAgaWYgKHN0YXJ0X3FxKHFxbXBpcGVbMF0s
IHFxZXBpcGVbMF0pID09IC0xKQotICAgICAgcmV0dXJuICZyZXNwX25vX2Zvcms7CisgICAgY29u
c3QgcmVzcG9uc2UgKnJlc3BfcXEgPSBzdGFydF9xcShxcW1waXBlWzBdLCBxcWVwaXBlWzBdKTsK
KyAgICBpZiAocmVzcF9xcSAhPSAwKSB7CisgICAgICByZXR1cm4gcmVzcF9xcTsKKyAgICB9CiAg
IH0KIAogICBkYXRhYnl0ZXMgPSAwOwpAQCAtMTgwLDggKzE4MSwxMCBAQAogICAgIGlmIChmc3Rh
dChmZCwgJnN0KSAhPSAwKQogICAgICAgcmV0dXJuICZyZXNwX2ludGVybmFsOwogICAgIGRhdGFi
eXRlcyA9IHN0LnN0X3NpemU7Ci0gICAgaWYgKHN0YXJ0X3FxKGZkLCBxcWVwaXBlWzBdKSA9PSAt
MSkKLSAgICAgIHJldHVybiAmcmVzcF9ub19mb3JrOworICAgIGNvbnN0IHJlc3BvbnNlICpyZXNw
X3FxID0gc3RhcnRfcXEoZmQsIHFxZXBpcGVbMF0pOworICAgIGlmIChyZXNwX3FxICE9IDApIHsK
KyAgICAgIHJldHVybiByZXNwX3FxOworICAgIH0KICAgfQogICBpZiAoIXJldHJ5X3dyaXRlKHFx
ZXBpcGVbMV0sIGJ1ZmZlci5zLCBidWZmZXIubGVuKzEpKSByZXR1cm4gJnJlc3Bfbm9fd3JpdGU7
CiAgIGNsb3NlX3FxcGlwZSgpOwo=
--20cf307ca09caa61bb049e9f6b65
Content-Type: text/x-csrc; charset=US-ASCII; name="plugin-toobig.c"
Content-Disposition: attachment; filename="plugin-toobig.c"
Content-Transfer-Encoding: base64
X-Attachment-Id: f_glcpeypv0

LyogUHJvdG90eXBlIHBsdWdpbiBmaWxlLgogKiBSZW1vdmUgYW55IGZ1bmN0aW9ucyB0aGF0IGFy
ZSBub3QgbmVlZGVkLgogKi8KCiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPGVycm5vLmg+
CiNpbmNsdWRlIDxsaW1pdHMuaD4KLy8gYmdsaWJzCiNpbmNsdWRlIDxtc2cvbXNnLmg+CiNpbmNs
dWRlIDxpb2J1Zi9vYnVmLmg+CgojaW5jbHVkZSAibWFpbGZyb250LmgiCgpzdGF0aWMgbG9uZyBy
ZWNpcF9jb3VudCA9IDA7CnN0YXRpYyBsb25nIG1zZ19zaXplID0gMDsKc3RhdGljIGxvbmcgdG9v
YmlnX3NpemUgPSAwOwpzdGF0aWMgY2hhciAqdG9vYmlnX3F1ZXVlID0gTlVMTDsKc3RhdGljIGlu
dCB0b29iaWdfZGVidWcgPSAwOwpzdGF0aWMgY29uc3QgY2hhciAqRU5WX1RPT0JJR19ERUJVRyA9
ICJUT09CSUdfREVCVUciOwpzdGF0aWMgY29uc3QgY2hhciAqRU5WX1RPT0JJR19TSVpFID0gIlRP
T0JJR19TSVpFIjsKc3RhdGljIGNvbnN0IGNoYXIgKkVOVl9UT09CSUdfUVVFVUUgPSAiVE9PQklH
X1FVRVVFIjsKCiNpZmRlZiBVTlVTRUQgCiNlbGlmIGRlZmluZWQoX19HTlVDX18pIAojIGRlZmlu
ZSBVTlVTRUQoeCkgVU5VU0VEXyAjIyB4IF9fYXR0cmlidXRlX18oKHVudXNlZCkpIAojZWxpZiBk
ZWZpbmVkKF9fTENMSU5UX18pIAojIGRlZmluZSBVTlVTRUQoeCkgLypAdW51c2VkQCovIHggCiNl
bHNlIAojIGRlZmluZSBVTlVTRUQoeCkgeCAKI2VuZGlmCgoKc3RhdGljIGxvbmcgc3RydG9sX2Zh
dGFsZXJyKGNvbnN0IGNoYXIgKmluc3RyKSB7CiAgICBjaGFyICpzdHJfZW5kOwogICAgbG9uZyBy
ZXQ7CgogICAgcmV0ID0gc3RydG9sKGluc3RyLCAmc3RyX2VuZCwgMTApOwogICAgLyogQWNjb3Jk
aW5nIHRvIHN0cnRvbCgzKSwgdGhpcyBpcyBob3cgd2UgY2hlY2sgZXJyb3JzICovCiAgICBpZiAo
KGVycm5vID09IEVSQU5HRSAmJiAodG9vYmlnX3NpemUgPT0gTE9OR19NQVggfHwgdG9vYmlnX3Np
emUgPT0gTE9OR19NSU4pKQoJfHwgKGVycm5vICE9IDAgJiYgdG9vYmlnX3NpemUgPT0gMCkKCXx8
IChpbnN0ciA9PSBzdHJfZW5kKSApIHsKICAgICAgZGllMnN5cygxMTEsIntDb3VsZCBub3QgcGFy
c2UgdmFsdWUgaW4gZW52IHZhcn1zIiwgRU5WX1RPT0JJR19TSVpFKTsKICAgIH0KCiAgICByZXR1
cm4gcmV0Owp9CgovKiBUaGUgaW5pdCBmdW5jdGlvbiBpcyBjYWxsZWQgb25jZSBhZnRlciB0aGUg
cGx1Z2luIGlzIGxvYWRlZC4gKi8Kc3RhdGljIGNvbnN0IHJlc3BvbnNlKiB0b29iaWdfaW5pdCh2
b2lkKQp7CiAgY29uc3QgY2hhciAqdG9vYmlnX2RlYnVnX3N0ciwgKnRvb2JpZ19zaXplX3N0cjsK
CiAgdG9vYmlnX3F1ZXVlID0gZ2V0ZW52KEVOVl9UT09CSUdfUVVFVUUpOwogIGlmICh0b29iaWdf
cXVldWUgJiYgISp0b29iaWdfcXVldWUpIHRvb2JpZ19xdWV1ZSA9IE5VTEw7CiAgdG9vYmlnX2Rl
YnVnX3N0ciA9IGdldGVudihFTlZfVE9PQklHX0RFQlVHKTsKICB0b29iaWdfc2l6ZV9zdHIgPSBn
ZXRlbnYoRU5WX1RPT0JJR19TSVpFKTsKCiAgaWYgKHRvb2JpZ19kZWJ1Z19zdHIgJiYgKnRvb2Jp
Z19kZWJ1Z19zdHIpIHsKICAgIHRvb2JpZ19kZWJ1ZyA9IHN0cnRvbF9mYXRhbGVycih0b29iaWdf
ZGVidWdfc3RyKTsKICB9CgogIGlmICh0b29iaWdfcXVldWUgJiYgdG9vYmlnX3NpemVfc3RyICYm
ICp0b29iaWdfc2l6ZV9zdHIpIHsKICAgIHRvb2JpZ19zaXplID0gc3RydG9sX2ZhdGFsZXJyKHRv
b2JpZ19zaXplX3N0cik7CiAgfQogIGlmICh0b29iaWdfZGVidWcgPj0gMikgewogICAgaWYgKHRv
b2JpZ19xdWV1ZSAmJiB0b29iaWdfc2l6ZSkgewogICAgICB3YXJuZigie3Rvb2JpZzogVXNpbmcg
cXVldWUgJ31zeycgZm9yIHJlY2lwICogc2l6ZSBsYXJnZXIgdGhhbiB9dSIsIHRvb2JpZ19xdWV1
ZSwgdG9vYmlnX3NpemUpOwogICAgfSBlbHNlIHsKICAgICAgd2FybmYoInt0b29iaWc6IERpc2Fi
bGVkLCB9c3s9J31zeycgfXN7PSd9c3snIixFTlZfVE9PQklHX1FVRVVFLHRvb2JpZ19xdWV1ZT90
b29iaWdfcXVldWU6IiIsRU5WX1RPT0JJR19TSVpFLHRvb2JpZ19zaXplX3N0cj90b29iaWdfc2l6
ZV9zdHI6IiIpOwogICAgfQogIH0KICByZXR1cm4gMDsKfQoKLyogVGhlIHJlc2V0IGZ1bmN0aW9u
IGlzIGNhbGxlZCBhdCBsZWFzdCBvbmNlIHBlciBtZXNzYWdlIGJlZm9yZSBhbnkgb2YKICogdGhl
IGVudmVsb3BlIG9yIGRhdGEgaXMgcHJvY2Vzc2VkLiAqLwpzdGF0aWMgY29uc3QgcmVzcG9uc2Uq
IHRvb2JpZ19yZXNldCh2b2lkKQp7CiAgaWYgKHRvb2JpZ19kZWJ1ZyA+PSAyKSB3YXJuMSgidG9v
YmlnOiBSZXNldCIpOwogIHJlY2lwX2NvdW50ID0gbXNnX3NpemUgPSAwOwogIHJldHVybiAwOwp9
CgovKiBUaGUgcmVjaXBpZW50IGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmUgb3IgbW9yZSB0aW1lcyBw
ZXIgbWVzc2FnZSwgb25jZQogKiBmb3IgZWFjaCByZWNpcGllbnQuICBUaGUgcGFyYW1ldGVyIGlz
IHRoZSByZWNpcGllbnQgZW1haWwgYWRkcmVzcywKICogYW5kIG1heSBiZSBtb2RpZmllZC4gKi8K
c3RhdGljIGNvbnN0IHJlc3BvbnNlKiB0b29iaWdfcmVjaXBpZW50KHN0ciogVU5VU0VEKGFkZHJl
c3MpKQp7CiAgKytyZWNpcF9jb3VudDsKICBpZiAodG9vYmlnX2RlYnVnID49IDIpIHdhcm5mKCJ7
dG9vYmlnOiB9dXsgcmVjaXBpZW50c30iLCByZWNpcF9jb3VudCk7CiAgcmV0dXJuIDA7Cn0KCi8q
IFRoZSBkYXRhX2Jsb2NrIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmNlIGZvciBlYWNoIGJsb2NrIG9m
IGRhdGEKICogcmVjZWl2ZWQgYnkgdGhlIHByb3RvY29sLiAgSWYgdGhpcyBmdW5jdGlvbiByZXR1
cm5zIGFuIGVycm9yCiAqIHJlc3BvbnNlLCBmdXJ0aGVyIGRhdGEgYmxvY2tzIHdpbGwgYmUgcmVj
ZWl2ZWQgYnV0IG5vdCBwcm9jZXNzZWQuICovCnN0YXRpYyBjb25zdCByZXNwb25zZSogdG9vYmln
X2RhdGFfYmxvY2soY29uc3QgY2hhciogVU5VU0VEKGJ5dGVzKSwgdW5zaWduZWQgbG9uZyBsZW4p
CnsKICBtc2dfc2l6ZSArPSBsZW47CiAgaWYgKHRvb2JpZ19kZWJ1ZyA+PSAyKSB3YXJuZigie3Rv
b2JpZzogfXV7IG1lc3NhZ2Ugc2l6ZX0iLCBtc2dfc2l6ZSk7CiAgcmV0dXJuIDA7Cn0KCi8qIFRo
ZSBtZXNzYWdlX2VuZCBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYm90aCB0aGUgbWVzc2FnZSBl
bnZlbG9wZQogKiBhbmQgZGF0YSBoYXZlIGJlZW4gY29tcGxldGVseSB0cmFuc21pdHRlZC4gIFRo
ZSBwYXJhbWV0ZXIgaXMgdGhlIGZpbGUKICogZGVzY3JpcHRvciBvZiB0aGUgdGVtcG9yYXJ5IGZp
bGUsIG9yIC0xIGlmIG5vbmUgd2FzIGNyZWF0ZWQuICovCnN0YXRpYyBjb25zdCByZXNwb25zZSog
dG9vYmlnX21lc3NhZ2VfZW5kKGludCBVTlVTRUQoZmQpKQp7CiAgbG9uZyB0b3RhbHNpemUgPSBt
c2dfc2l6ZSAqIHJlY2lwX2NvdW50OwoKICBpZiAodG9vYmlnX3NpemUgJiYgdG9vYmlnX3F1ZXVl
ICYmICh0b3RhbHNpemUgPiB0b29iaWdfc2l6ZSkpIHsKICAgIHNldGVudigiUU1BSUxRVUVVRSIs
dG9vYmlnX3F1ZXVlLDEpOwogICAgaWYgKHRvb2JpZ19kZWJ1ZyA+PSAxKSB3YXJuZigie3Rvb2Jp
Zzogc2l6ZT19dXssIHJlY2lwX2NvdW50PX11eyx0b3RhbHNpemU9fXV7LCB0b29iaWc9fXV7OyB1
c2luZyBxdWV1ZSAnfXN7J30iLCBtc2dfc2l6ZSwgcmVjaXBfY291bnQsIHRvdGFsc2l6ZSwgdG9v
YmlnX3NpemUsIHRvb2JpZ19xdWV1ZSk7CiAgfSBlbHNlIHsKICAgIGlmICh0b29iaWdfZGVidWcg
Pj0gMSkgd2FybmYoInt0b29iaWc6IHNpemU9fXV7LCByZWNpcF9jb3VudD19dXssdG90YWxzaXpl
PX11eywgdG9vYmlnPX11ezsgdXNpbmcgZGVmYXVsdCBxdWV1ZX0iLCBtc2dfc2l6ZSwgcmVjaXBf
Y291bnQsIHRvdGFsc2l6ZSwgdG9vYmlnX3NpemUpOwogIH0KICByZXR1cm4gMDsKfQoKLyogUGx1
Z2lucyBtdXN0IGV4cG9ydCB0aGlzIHN0cnVjdHVyZS4KICogUmVtb3ZlIGFueSBvZiB0aGUgZW50
cmllcyB0aGF0IGFyZSBub3QgdXNlZCAoaWUgMCBvciBOVUxMKS4KICovCnN0cnVjdCBwbHVnaW4g
cGx1Z2luID0gewogIC52ZXJzaW9uID0gUExVR0lOX1ZFUlNJT04sCiAgLmZsYWdzID0gRkxBR19O
RUVEX0ZJTEUsCiAgLmluaXQgPSB0b29iaWdfaW5pdCwKICAucmVzZXQgPSB0b29iaWdfcmVzZXQs
CiAgLnJlY2lwaWVudCA9IHRvb2JpZ19yZWNpcGllbnQsCiAgLmRhdGFfYmxvY2sgPSB0b29iaWdf
ZGF0YV9ibG9jaywKICAubWVzc2FnZV9lbmQgPSB0b29iaWdfbWVzc2FnZV9lbmQsCn07Cg==

--20cf307ca09caa61bb049e9f6b65
Content-Type: text/plain; charset=us-ascii


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
--20cf307ca09caa61bb049e9f6b65--