/[smeserver]/rpms/qpsmtpd-plugins/sme9/qpsmtpd-plugins-bz10125.patch
ViewVC logotype

Annotation of /rpms/qpsmtpd-plugins/sme9/qpsmtpd-plugins-bz10125.patch

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


Revision 1.1 - (hide annotations) (download)
Mon Feb 27 22:30:32 2017 UTC (7 years, 3 months ago) by unnilennium
Branch: MAIN
CVS Tags: qpsmtpd-plugins-0_0_1-5_el6_sme, HEAD
* Mon Feb 27 2017 Jean-Philipe Pialasse <tests@pialasse.com> 0.0.1-5.sme
- remove whitelist_soft [SME: 10125]

1 unnilennium 1.1 diff -Nur qpsmtpd-plugins-openfusion-20050429.old/plugins/whitelist_soft qpsmtpd-plugins-openfusion-20050429/plugins/whitelist_soft
2     --- qpsmtpd-plugins-openfusion-20050429.old/plugins/whitelist_soft 2005-03-29 00:02:37.000000000 -0500
3     +++ qpsmtpd-plugins-openfusion-20050429/plugins/whitelist_soft 1969-12-31 19:00:00.000000000 -0500
4     @@ -1,223 +0,0 @@
5     -=head1 NAME
6     -
7     -whitelist_soft - whitelist override for other qpsmtpd plugins
8     -
9     -
10     -=head1 DESCRIPTION
11     -
12     -The whitelist_soft plugin allows selected hosts or senders or recipients
13     -to be whitelisted as exceptions to later plugin processing. It is a more
14     -conservative variant of Devin Carraway's 'whitelist' plugin.
15     -
16     -
17     -=head1 CONFIGURATION
18     -
19     -To enable the plugin, add it to the qpsmtpd/config/plugins file as usual.
20     -It should precede any plugins you might wish to whitelist for.
21     -
22     -Several configuration files are supported, corresponding to different
23     -parts of the SMTP conversation:
24     -
25     -=over 4
26     -
27     -=item whitelisthosts
28     -
29     -Any IP address (or start-anchored fragment thereof) listed in the
30     -whitelisthosts file is exempted from any further validation during
31     -'connect', and can be selectively exempted at other stages by
32     -plugins testing for a 'whitelisthost' connection note.
33     -
34     -Similarly, if the environment variable $WHITELISTCLIENT is set
35     -(which can be done by tcpserver), the connection will be exempt from
36     -further 'connect' validation, and the host can be selectively
37     -exempted by other plugins testing for a 'whitelistclient' connection
38     -note.
39     -
40     -=item whitelisthelo
41     -
42     -Any host that issues a HELO matching an entry in whitelisthelo will
43     -be exempted from further validation at the 'helo' stage. Subsequent
44     -plugins can test for a 'whitelisthelo' connection note. Note that
45     -this does not actually amount to an authentication in any meaningful
46     -sense.
47     -
48     -=item whitelistsenders
49     -
50     -If the envelope sender of a mail (that which is sent as the MAIL FROM)
51     -matches an entry in whitelistsenders, or if the hostname component
52     -matches, the mail will be exempted from any further validation within
53     -the 'mail' stage. Subsequent plugins can test for this exemption as a
54     -'whitelistsender' transaction note.
55     -
56     -=item whitelistrcpt
57     -
58     -If any recipient of a mail (that sent as the RCPT TO) matches an
59     -entry from whitelistrcpt, or if the hostname component matches, no
60     -further validation will be required for this recipient. Subsequent
61     -plugins can test for this exemption using a 'whitelistrcpt'
62     -transaction note, which holds the count of whitelisted recipients.
63     -
64     -=back
65     -
66     -whitelist_soft also supports per-recipient whitelisting when using
67     -the per_user_config plugin. To enable the per-recipient behaviour
68     -(delaying all whitelisting until the rcpt part of the smtp
69     -conversation, and using per-recipient whitelist configs, if
70     -available), pass a true 'per_recipient' argument in the
71     -config/plugins invocation i.e.
72     -
73     - whitelist_soft per_recipient 1
74     -
75     -By default global and per-recipient whitelists are merged; to turn off
76     -the merge behaviour pass a false 'merge' argument in the config/plugins
77     -invocation i.e.
78     -
79     - whitelist_soft per_recipient 1 merge 0
80     -
81     -
82     -=head1 BUGS
83     -
84     -Whitelist lookups are all O(n) linear scans of configuration files, even
85     -though they're all associative lookups. Something should be done about
86     -this when CDB/DB/GDBM configs are supported.
87     -
88     -
89     -=head1 AUTHOR
90     -
91     -Based on the 'whitelist' plugin by Devin Carraway <qpsmtpd@devin.com>.
92     -
93     -Modified by Gavin Carr <gavin@openfusion.com.au> to not inherit
94     -whitelisting across hooks, but use per-hook whitelist notes instead.
95     -This is a more conservative approach e.g. whitelisting an IP will not
96     -automatically allow relaying from that IP.
97     -
98     -=cut
99     -
100     -my $VERSION = 0.02;
101     -
102     -# Default is to merge whitelists in per_recipient mode
103     -my %MERGE = ( merge => 1 );
104     -
105     -sub register {
106     - my ($self, $qp, %arg) = @_;
107     -
108     - $self->{_per_recipient} = 1 if $arg{per_recipient};
109     - $MERGE{merge} = $arg{merge} if defined $arg{merge};
110     -
111     - # Normal mode - whitelist per hook
112     - unless ($arg{per_recipient}) {
113     - $self->register_hook("connect", "check_host");
114     - $self->register_hook("helo", "check_helo");
115     - $self->register_hook("ehlo", "check_helo");
116     - $self->register_hook("mail", "check_sender");
117     - $self->register_hook("rcpt", "check_rcpt");
118     - }
119     - # Per recipient mode - defer all whitelisting to rcpt hook
120     - else {
121     - $self->register_hook("rcpt", "check_host");
122     - $self->register_hook("helo", "helo_helper");
123     - $self->register_hook("ehlo", "helo_helper");
124     - $self->register_hook("rcpt", "check_helo");
125     - $self->register_hook("rcpt", "check_sender");
126     - $self->register_hook("rcpt", "check_rcpt");
127     - }
128     -}
129     -
130     -sub check_host {
131     - my ($self, $transaction, $rcpt) = @_;
132     - my $ip = $self->qp->connection->remote_ip || return (DECLINED);
133     -
134     - # From tcpserver
135     - if (exists $ENV{WHITELISTCLIENT}) {
136     - $self->qp->connection->notes('whitelistclient', 1);
137     - $self->log(2,"host $ip is a whitelisted client");
138     - return OK;
139     - }
140     -
141     - my $config_arg = $self->{_per_recipient} ? { rcpt => $rcpt, %MERGE } : {};
142     - for my $h ($self->qp->config('whitelisthosts', $config_arg)) {
143     - if ($h eq $ip or $ip =~ /^\Q$h\E/) {
144     - $self->qp->connection->notes('whitelisthost', 1);
145     - $self->log(2,"host $ip is a whitelisted host");
146     - return OK;
147     - }
148     - }
149     - return DECLINED;
150     -}
151     -
152     -sub helo_helper {
153     - my ($self, $transaction, $helo) = @_;
154     - $self->{_whitelist_soft_helo} = $helo;
155     - return DECLINED;
156     -}
157     -
158     -sub check_helo {
159     - my ($self, $transaction, $helo) = @_;
160     -
161     - # If per_recipient will be rcpt hook, and helo actually rcpt
162     - my $config_arg = {};
163     - if ($self->{_per_recipient}) {
164     - $config_arg = { rcpt => $helo, %MERGE };
165     - $helo = $self->{_whitelist_soft_helo};
166     - }
167     -
168     - for my $h ($self->qp->config('whitelisthelo', $config_arg)) {
169     - if ($helo and lc $h eq lc $helo) {
170     - $self->qp->connection->notes('whitelisthelo', 1);
171     - $self->log(2,"helo host $helo in whitelisthelo");
172     - return OK;
173     - }
174     - }
175     - return DECLINED;
176     -}
177     -
178     -sub check_sender {
179     - my ($self, $transaction, $sender) = @_;
180     -
181     - # If per_recipient will be rcpt hook, and sender actually rcpt
182     - my $config_arg = {};
183     - if ($self->{_per_recipient}) {
184     - $config_arg = { rcpt => $sender, %MERGE };
185     - $sender = $transaction->sender;
186     - }
187     -
188     - return DECLINED if $sender->format eq '<>';
189     - my $addr = lc $sender->address or return DECLINED;
190     - my $host = lc $sender->host or return DECLINED;
191     -
192     - for my $h ($self->qp->config('whitelistsenders', $config_arg)) {
193     - next unless $h;
194     - $h = lc $h;
195     -
196     - if ($addr eq $h or $host eq $h) {
197     - $transaction->notes('whitelistsender', 1);
198     - $self->log(2,"envelope sender $addr in whitelistsenders");
199     - return OK;
200     - }
201     - }
202     - return DECLINED;
203     -}
204     -
205     -sub check_rcpt {
206     - my ($self, $transaction, $rcpt) = @_;
207     -
208     - my $addr = lc $rcpt->address or return DECLINED;
209     - my $host = lc $rcpt->host or return DECLINED;
210     -
211     - my $config_arg = $self->{_per_recipient} ? { rcpt => $rcpt, %MERGE } : {};
212     - for my $h ($self->qp->config('whitelistrcpt', $config_arg)) {
213     - next unless $h;
214     - $h = lc $h;
215     -
216     - if ($addr eq $h or $host eq $h) {
217     - my $note = $transaction->notes('whitelistrcpt');
218     - $transaction->notes('whitelistrcpt', ++$note);
219     - $self->log(2,"recipient $addr in whitelistrcpt");
220     - return OK;
221     - }
222     - }
223     - return DECLINED;
224     -}
225     -
226     -# arch-tag: 15a093f1-2960-4dbe-be72-584d7ff1d92a
227     -

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