/[smeserver]/rpms/qpsmtpd/sme8/0003-new-plugin-check_bogus_bounce.patch
ViewVC logotype

Contents of /rpms/qpsmtpd/sme8/0003-new-plugin-check_bogus_bounce.patch

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Sun Nov 14 20:50:20 2010 UTC (14 years ago) by slords
Branch: MAIN
CVS Tags: qpsmtpd-0_84-3_el5_sme, qpsmtpd-0_84-6_el5_sme, qpsmtpd-0_84-2_el5_sme, qpsmtpd-0_84-5_el5_sme, qpsmtpd-0_84-8_el5_sme, qpsmtpd-0_84-9_el5_sme, qpsmtpd-0_84-4_el5_sme, qpsmtpd-0_84-7_el5_sme, HEAD
* Sun Nov 14 2010 <slords@mail.com> 0.84-2.sme
- Sync with upstream git repo.
- Fix require_resolvable_fromhost doesn't work [SME: 6369]
- Fix TLS security defaults [SME: 6366]
- Fix fatal errors when mail has no headers [SME: 6345]

1 From 1002d0dd561ad7cd22ecb76f1ecf46487ad83cf7 Mon Sep 17 00:00:00 2001
2 From: Steve Kemp <steve@steve.org.uk>
3 Date: Tue, 4 May 2010 23:37:52 +0100
4 Subject: new plugin - check_bogus_bounce
5
6 The current status file, in git, has the following entry:
7
8 -plugin to reject mails from <> if it has multiple recipients.
9
10 I hereby submit my plugin to handle this case for possible inclusion,
11 under the same terms as the current qpsmtpd release.
12
13 The plugin is available here:
14
15 http://www.steve.org.uk/Software/qpsmtpd/check_bogus_bounce/
16
17 Please find patch against git head below, adding the file and removing
18 the TODO line from the status file.
19
20 Signed-off-by: Robert <rspier@pobox.com>
21 ---
22 STATUS | 2 -
23 plugins/check_bogus_bounce | 126 ++++++++++++++++++++++++++++++++++++++++++++
24 2 files changed, 126 insertions(+), 2 deletions(-)
25 create mode 100644 plugins/check_bogus_bounce
26
27 diff --git a/STATUS b/STATUS
28 index 4a00dc6..81cf0df 100644
29 --- a/STATUS
30 +++ b/STATUS
31 @@ -59,8 +59,6 @@ Make a system for configuring the plugins per user/domain/...
32
33 support databytes per user / domain
34
35 -plugin to reject mails from <> if it has multiple recipients.
36 -
37 localiphost - support foo@[a.b.c.d] addresses
38
39 Move dispatch() etc from SMTP.pm to Qpsmtpd.pm to allow other similar
40 diff --git a/plugins/check_bogus_bounce b/plugins/check_bogus_bounce
41 new file mode 100644
42 index 0000000..045889c
43 --- /dev/null
44 +++ b/plugins/check_bogus_bounce
45 @@ -0,0 +1,126 @@
46 +#!/usr/bin/perl -w
47 +
48 +=head1 NAME
49 +
50 +check_bogus_bounce - Check that a bounce message isn't bogus
51 +
52 +=head1 DESCRIPTION
53 +
54 +This plugin is designed to reject bogus bounce messages.
55 +
56 +In our case a bogus bounce message is defined as a bounce message
57 +which has more than a single recipient.
58 +
59 +=head1 CONFIGURATION
60 +
61 +Only a single argument is recognized and is assumed to be the default
62 +action. Valid settings are:
63 +
64 +=over 8
65 +
66 +=item log
67 +
68 +Merely log the receipt of the bogus bounce (the default behaviour).
69 +
70 +=item deny
71 +
72 +Deny with a hard error code.
73 +
74 +=item denysoft
75 +
76 +Deny with a soft error code.
77 +
78 +=back
79 +
80 +=cut
81 +
82 +=head1 AUTHOR
83 +
84 +Steve Kemp
85 +--
86 +http://steve.org.uk/Software/qpsmtpd/
87 +
88 +=cut
89 +
90 +=begin doc
91 +
92 +Look for our single expected argument and configure "action" appropriately.
93 +
94 +=end doc
95 +
96 +=cut
97 +
98 +sub register {
99 + my ($self, $qp, $arg, @nop) = (@_);
100 +
101 + #
102 + # Default behaviour is to merely log.
103 + #
104 + $self->{_action} = "log";
105 +
106 + #
107 + # Unless one was specified
108 + #
109 + if ($arg) {
110 + if ($arg =~ /^(log|deny|denysoft)$/i) {
111 + $self->{_action} = $arg;
112 + }
113 + else {
114 + die "Invalid argument '$arg' - use one of : log, deny, denysoft";
115 + }
116 + }
117 +}
118 +
119 +=begin doc
120 +
121 +Handle the detection of bounces here.
122 +
123 +If we find a match then we'll react with our expected action.
124 +
125 +=end doc
126 +
127 +=cut
128 +
129 +sub hook_data_post {
130 + my ($self, $transaction) = (@_);
131 +
132 + #
133 + # Find the sender, and return unless it wasn't a bounce.
134 + #
135 + my $sender = $transaction->sender->address || undef;
136 + return DECLINED unless ($sender =~ /^<>$/);
137 +
138 + #
139 + # Get the recipients.
140 + #
141 + my @to = $transaction->recipients || ();
142 + return DECLINED unless (scalar @to > 1);
143 +
144 + #
145 + # OK at this point we know:
146 + #
147 + # 1. It is a bounce, via the null-envelope.
148 + # 2. It is a bogus bounce, because there are more than one recipients.
149 + #
150 + if ($self->{_action} =~ /^log$/i) {
151 + $self->log(LOGWARN,
152 + $self->plugin_name() . " bogus bounce for :" . join(",", @to));
153 + }
154 + elsif ($self->{_action} =~ /^deny$/i) {
155 + return (DENY,
156 + $self->plugin_name() . " determined this to be a bogus bounce");
157 + }
158 + elsif ($self->{_action} =~ /^denysoft$/i) {
159 + return (DENYSOFT,
160 + $self->plugin_name() . " determined this to be a bogus bounce");
161 + }
162 + else {
163 + $self->log(LOGWARN,
164 + $self->plugin_name() . " failed to determine action. bug?");
165 + }
166 +
167 + #
168 + # All done; allow this to proceed
169 + #
170 + return DECLINED;
171 +}
172 --
173 1.7.2.2
174

admin@koozali.org
ViewVC Help
Powered by ViewVC 1.2.1 RSS 2.0 feed