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 > limit) it will use an alternate QMAILQUEUE, which= will handle the message differently.</div> <div><br></div><div>Initially it didn'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--