Make all plugins use $self->connection rather than $self->qp->connection

Merge remote-tracking branch 'msimerson/connect'

Conflicts:
	plugins/async/require_resolvable_fromhost
	plugins/require_resolvable_fromhost
This commit is contained in:
Ask Bjørn Hansen 2012-06-03 23:53:43 -07:00
commit 0e2384cceb
19 changed files with 65 additions and 63 deletions

View File

@ -69,8 +69,8 @@ should be configured to run I<last>, like B<rcpt_ok>.
unless (($rc == DENY) and $self->{_count_relay_max});
my $count =
($self->qp->connection->notes('count_relay_attempts') || 0) + 1;
$self->qp->connection->notes('count_relay_attempts', $count);
($self->connection->notes('count_relay_attempts') || 0) + 1;
$self->connection->notes('count_relay_attempts', $count);
return ($rc, @msg) unless ($count > $self->{_count_relay_max});
return Qpsmtpd::DSN->relaying_denied(DENY_DISCONNECT,

View File

@ -116,8 +116,7 @@ sub read_now {
sub check_talker_post {
my ($self, $transaction) = @_;
my $conn = $self->qp->connection;
return DECLINED unless $conn->notes('earlytalker');
return DECLINED unless $self->connection->notes('earlytalker');
return DECLINED if $self->{'defer-reject'};
return (DENY,$MSG) if $self->{_args}->{'action'} eq 'deny';
return (DENYSOFT,$MSG) if $self->{_args}->{'action'} eq 'denysoft';

View File

@ -64,21 +64,21 @@ sub process_a_result {
my ($class, $qp, $result, $query) = @_;
my $conn = $qp->connection;
return if $conn->notes('dnsbl');
return if $class->connection->notes('dnsbl');
my $templates = $conn->notes('dnsbl_templates');
my $templates = $class->connection->notes('dnsbl_templates');
my $ip = $conn->remote_ip;
my $template = $templates->{$query};
$template =~ s/%IP%/$ip/g;
$conn->notes('dnsbl', $template);
$class->connection->notes('dnsbl', $template);
}
sub process_txt_result {
my ($class, $qp, $result, $query) = @_;
my $conn = $qp->connection;
my $conn = $class->connection;
$conn->notes('dnsbl', $result) unless $conn->notes('dnsbl');
}

View File

@ -36,7 +36,8 @@ sub register {
sub hook_mail_start {
my ( $self, $transaction, $sender ) = @_;
return DECLINED if $self->qp->connection->notes('whitelisthost');
return DECLINED
if ($self->connection->notes('whitelisthost'));
if ( $sender ne '<>' ) {
@ -64,7 +65,7 @@ sub hook_mail_done {
my ( $self, $transaction, $sender ) = @_;
return DECLINED
if ( $self->qp->connection->notes('whitelisthost') );
if ( $self->connection->notes('whitelisthost') );
if ( $sender ne "<>" && !$transaction->notes('resolvable_fromhost') ) {
# default of temp_resolver_failed is DENYSOFT

View File

@ -165,7 +165,7 @@ sub is_immune {
return 1;
};
if ( $self->qp->connection->notes('whitelisthost') ) {
if ( $self->connection->notes('whitelisthost') ) {
$self->log(LOGINFO, "skip: whitelisted host");
return 1;
};

View File

@ -106,7 +106,7 @@ sub apr_connect_handler {
my ($self, $transaction) = @_;
return DECLINED unless $self->{_args}{'check-at'}{CONNECT};
return DECLINED if ($self->qp->connection->notes('whitelisthost'));
return DECLINED if ($self->connection->notes('whitelisthost'));
my $ip = $self->qp->connection->remote_ip;
my $c = $self->qp->{conn};
@ -117,7 +117,7 @@ sub apr_connect_handler {
if ($rc == APR::Const::SUCCESS()) {
$self->log(LOGNOTICE, "remote host started talking before we said hello [$ip]");
if ($self->{_args}->{'defer-reject'}) {
$self->qp->connection->notes('earlytalker', 1);
$self->connection->notes('earlytalker', 1);
}
else {
my $msg = 'Connecting host started transmitting before SMTP greeting';
@ -134,7 +134,7 @@ sub apr_data_handler {
my ($self, $transaction) = @_;
return DECLINED unless $self->{_args}{'check-at'}{DATA};
return DECLINED if ($self->qp->connection->notes('whitelisthost'));
return DECLINED if ($self->connection->notes('whitelisthost'));
my $ip = $self->qp->connection->remote_ip;
my $c = $self->qp->{conn};
@ -160,13 +160,13 @@ sub connect_handler {
return DECLINED unless $self->{_args}{'check-at'}{CONNECT};
return DECLINED
if ($self->qp->connection->notes('whitelisthost'));
if ($self->connection->notes('whitelisthost'));
$in->add(\*STDIN) || return DECLINED;
if ($in->can_read($self->{_args}->{'wait'})) {
$self->log(LOGNOTICE, "remote host started talking before we said hello [$ip]");
if ($self->{_args}->{'defer-reject'}) {
$self->qp->connection->notes('earlytalker', 1);
$self->connection->notes('earlytalker', 1);
} else {
my $msg = 'Connecting host started transmitting before SMTP greeting';
return (DENY,$msg) if $self->{_args}->{'action'} eq 'deny';
@ -185,7 +185,7 @@ sub data_handler {
return DECLINED unless $self->{_args}{'check-at'}{DATA};
return DECLINED
if ($self->qp->connection->notes('whitelisthost'));
if ($self->connection->notes('whitelisthost'));
$in->add(\*STDIN) || return DECLINED;
if ($in->can_read($self->{_args}->{'wait'})) {
@ -204,7 +204,7 @@ sub mail_handler {
my ($self, $transaction) = @_;
my $msg = 'Connecting host started transmitting before SMTP greeting';
return DECLINED unless $self->qp->connection->notes('earlytalker');
return DECLINED unless $self->connection->notes('earlytalker');
return (DENY,$msg) if $self->{_args}->{'action'} eq 'deny';
return (DENYSOFT,$msg) if $self->{_args}->{'action'} eq 'denysoft';
return DECLINED;

View File

@ -34,7 +34,7 @@ sub register {
sub hook_connect {
my $self = shift;
$self->qp->connection->notes('unrec_cmd_count', 0);
$self->connection->notes('unrec_cmd_count', 0);
return DECLINED;
}
@ -44,8 +44,8 @@ sub hook_unrecognized_command {
$self->log(LOGINFO, "Unrecognized command '$cmd'");
my $badcmdcount =
$self->qp->connection->notes( 'unrec_cmd_count',
($self->qp->connection->notes('unrec_cmd_count') || 0) + 1
$self->connection->notes( 'unrec_cmd_count',
($self->connection->notes('unrec_cmd_count') || 0) + 1
);
if ($badcmdcount >= $self->{_unrec_cmd_max}) {

View File

@ -71,7 +71,7 @@ sub hook_connect {
$sel->add($res->bgsend("$reversed_ip.$dnsbl", "TXT"));
}
$self->qp->connection->notes('whitelist_sockets', $sel);
$self->connection->notes('whitelist_sockets', $sel);
return DECLINED;
}
@ -79,7 +79,7 @@ sub hook_connect {
sub process_sockets {
my ($self) = @_;
my $conn = $self->qp->connection;
my $conn = $self->connection;
return $conn->notes('whitelisthost')
if $conn->notes('whitelisthost');

View File

@ -170,8 +170,8 @@ sub hook_connect {
}
}
$self->qp->connection->notes('dnsbl_sockets', $sel);
$self->qp->connection->notes('dnsbl_domains', $dom);
$self->connection->notes('dnsbl_sockets', $sel);
$self->connection->notes('dnsbl_domains', $dom);
return DECLINED;
}
@ -199,7 +199,7 @@ sub ip_whitelisted {
my ($self) = @_;
my $remote_ip = $self->qp->connection->remote_ip;
my $white = $self->qp->connection->notes('whitelisthost');
my $white = $self->connection->notes('whitelisthost');
if ( $white ) {
$self->log(LOGDEBUG, "skip: whitelist overrode blacklist: $white");
return 1;
@ -219,7 +219,7 @@ sub ip_whitelisted {
sub process_sockets {
my ($self) = @_;
my $conn = $self->qp->connection;
my $conn = $self->connection;
return $conn->notes('dnsbl') if $conn->notes('dnsbl');
@ -334,13 +334,15 @@ sub hook_rcpt {
sub hook_disconnect {
my ($self, $transaction) = @_;
$self->qp->connection->notes('dnsbl_sockets', undef);
$self->connection->notes('dnsbl_sockets', undef);
return DECLINED;
}
sub get_reject_type {
my $self = shift;
my $default = shift || DENY;
my $deny = $self->{_args}{reject_type} or return $default;
return $self->{_args}{reject_type} eq 'temp' ? DENYSOFT
: $self->{_args}{reject_type} eq 'disconnect' ? DENY_DISCONNECT

View File

@ -324,7 +324,7 @@ sub is_immune {
$self->log(LOGINFO, "skip: relay client");
return 1;
};
if ( $self->qp->connection->notes('whitelisthost') ) {
if ( $self->connection->notes('whitelisthost') ) {
$self->log(LOGINFO, "skip: whitelisted host");
return 1;
};

View File

@ -46,10 +46,10 @@ sub connect_handler {
my $c_name = $geoip->country_name_by_addr( $remote_ip );
if ( $c_name ) {
$self->qp->connection->notes('geoip_country_name', $c_name);
$self->connection->notes('geoip_country_name', $c_name);
};
$self->qp->connection->notes('geoip_country', $c_code);
$self->connection->notes('geoip_country', $c_code);
my $message = $c_code;
$message .= ", $c_name" if $c_name;

View File

@ -328,7 +328,7 @@ sub store_v2_results {
uptime => $uptime,
};
$self->qp->connection->notes('p0f', $p0f);
$self->connection->notes('p0f', $p0f);
$self->log(LOGINFO, $genre." (".$detail.")");
$self->log(LOGERROR,"error: $@") if $@;
return $p0f;
@ -354,7 +354,7 @@ sub store_v3_results {
$r{uptime} = $r{uptime_min} if $r{uptime_min};
};
$self->qp->connection->notes('p0f', \%r);
$self->connection->notes('p0f', \%r);
$self->log(LOGINFO, "$r{os_name} $r{os_flavor}");
$self->log(LOGDEBUG, join(' ', @values ));
$self->log(LOGERROR,"error: $@") if $@;

View File

@ -49,11 +49,11 @@ sub register {
sub hook_disconnect {
my ($self) = @_;
my $milter = $self->qp->connection->notes('milter') || return DECLINED;
my $milter = $self->connection->notes('milter') || return DECLINED;
$milter->send_quit();
$self->qp->connection->notes('spam', undef);
$self->qp->connection->notes('milter', undef);
$self->connection->notes('spam', undef);
$self->connection->notes('milter', undef);
return DECLINED;
}
@ -97,9 +97,9 @@ sub hook_connect {
$milter->open($self->{host}, $self->{port}, 'tcp');
$milter->protocol_negotiation();
$self->qp->connection->notes(milter => $milter);
$self->connection->notes(milter => $milter);
$self->qp->connection->notes(
$self->connection->notes(
milter_header_changes => { add => [], delete => [], replace => [], }
);
my $remote_ip = $self->qp->connection->remote_ip;
@ -110,7 +110,7 @@ sub hook_connect {
$self->check_results($transaction, "connection",
$milter->send_connect($remote_host, 'tcp4', 0, $remote_ip));
};
$self->qp->connection->notes('spam', $@) if $@;
$self->connection->notes('spam', $@) if $@;
return DECLINED;
}
@ -118,11 +118,11 @@ sub hook_connect {
sub hook_helo {
my ($self, $transaction) = @_;
if (my $txt = $self->qp->connection->notes('spam')) {
if (my $txt = $self->connection->notes('spam')) {
return DENY, $txt;
}
my $milter = $self->qp->connection->notes('milter');
my $milter = $self->connection->notes('milter');
my $helo = $self->qp->connection->hello;
my $host = $self->qp->connection->hello_host;
@ -139,7 +139,7 @@ sub hook_helo {
sub hook_mail {
my ($self, $transaction, $address, %param) = @_;
my $milter = $self->qp->connection->notes('milter');
my $milter = $self->connection->notes('milter');
$self->log(LOGDEBUG, "milter $self->{name} checking MAIL FROM " . $address->format);
eval { $self->check_results($transaction, "MAIL FROM",
@ -152,7 +152,7 @@ sub hook_mail {
sub hook_rcpt {
my ($self, $transaction, $address, %param) = @_;
my $milter = $self->qp->connection->notes('milter');
my $milter = $self->connection->notes('milter');
$self->log(LOGDEBUG, "milter $self->{name} checking RCPT TO " . $address->format);
@ -166,7 +166,7 @@ sub hook_rcpt {
sub hook_data_post {
my ($self, $transaction) = @_;
my $milter = $self->qp->connection->notes('milter');
my $milter = $self->connection->notes('milter');
$self->log(LOGDEBUG, "milter $self->{name} checking headers");

View File

@ -16,7 +16,7 @@ of messages. The default is 1. Use a negative number to disable.
For use with other plugins, scribble the revised failure rate to
$self->qp->connection->notes('random_fail_%');
$self->connection->notes('random_fail_%');
=cut
@ -31,7 +31,7 @@ sub register {
sub NEXT() { DECLINED }
sub random_fail {
my $fpct = $_[0]->qp->connection->notes('random_fail_%');
my $fpct = $_[0]->connection->notes('random_fail_%');
=head1 calculating the probability of failure
@ -55,7 +55,7 @@ or
sub hook_connect {
$_[0]->qp->connection->notes('random_fail_%', $_[0]->{__PACKAGE__.'_how'});
$_[0]->connection->notes('random_fail_%', $_[0]->{__PACKAGE__.'_how'});
goto &random_fail
}

View File

@ -305,8 +305,8 @@ sub event_read {
if (defined $sock) {
$qp->connection( $qp->connection->clone );
$qp->reset_transaction;
$qp->connection->notes('tls_socket', $sock);
$qp->connection->notes('tls_enabled', 1);
$self->connection->notes('tls_socket', $sock);
$self->connection->notes('tls_enabled', 1);
$qp->watch_read(1);
return 1;
}

View File

@ -15,17 +15,17 @@ sub test_hook_unrecognized_command {
my $self = shift;
$self->{_unrec_cmd_max} = 2;
$self->qp->connection->notes( 'unrec_cmd_count', 0 );
$self->connection->notes( 'unrec_cmd_count', 0 );
my ($code, $mess) = $self->hook_unrecognized_command(undef,'hiya');
cmp_ok( $code, '==', DECLINED, "good" );
$self->qp->connection->notes( 'unrec_cmd_count', 2 );
$self->connection->notes( 'unrec_cmd_count', 2 );
($code, $mess) = $self->hook_unrecognized_command(undef,'snookums');
cmp_ok( $code, '==', DENY_DISCONNECT, "limit" );
($code, $mess) = $self->hook_unrecognized_command(undef,'wtf');
cmp_ok( $code, '==', DENY_DISCONNECT, "over limit" );
cmp_ok( $self->qp->connection->notes( 'unrec_cmd_count'), '==', 4, "correct increment" );
cmp_ok( $self->connection->notes( 'unrec_cmd_count'), '==', 4, "correct increment" );
};

View File

@ -27,9 +27,9 @@ sub test_ip_whitelisted {
$self->qp->connection->relay_client(0);
ok( ! $self->ip_whitelisted('10.1.1.1'), "no, -");
$self->qp->connection->notes('whitelisthost', 'hello honey!');
$self->connection->notes('whitelisthost', 'hello honey!');
ok( $self->ip_whitelisted('10.1.1.1'), "yes, +");
$self->qp->connection->notes('whitelisthost', undef);
$self->connection->notes('whitelisthost', undef);
};
sub test_is_set_rblsmtpd {
@ -51,15 +51,15 @@ sub test_is_set_rblsmtpd {
sub test_hook_connect {
my $self = shift;
my $connection = $self->qp->connection;
$connection->relay_client(0); # other tests may leave it enabled
$connection->remote_ip('127.0.0.2'); # standard dnsbl test value
my $conn = $self->qp->connection;
$conn->relay_client(0); # other tests may leave it enabled
$conn->remote_ip('127.0.0.2'); # standard dnsbl test value
cmp_ok( DECLINED, '==', $self->hook_connect($self->qp->transaction),
"connect +");
ok($connection->notes('dnsbl_sockets'), "sockets +");
ok($connection->notes('dnsbl_domains'), "domains +");
ok($self->connection->notes('dnsbl_sockets'), "sockets +");
ok($self->connection->notes('dnsbl_domains'), "domains +");
}
sub test_hook_rcpt {

View File

@ -63,9 +63,9 @@ sub test_is_immune {
ok( ! $self->is_immune(), "nope -" );
foreach ( qw/ whitelisthost / ) {
$self->qp->connection->notes($_, 1);
$self->connection->notes($_, 1);
ok( $self->is_immune(), $_);
$self->qp->connection->notes($_, undef);
$self->connection->notes($_, undef);
};
foreach ( qw/ whitelistsender tls_enabled / ) {
@ -186,7 +186,7 @@ sub _reset_transaction {
$self->qp->connection->relay_client(0);
$self->qp->transaction->notes('whitelistsender',0);
$self->qp->connection->notes('whitelisthost',0);
$self->connection->notes('whitelisthost',0);
$self->qp->transaction->notes('tls_enabled',0);
$self->{_args}{p0f} = undef;
$self->{_args}{geoip} = undef;

View File

@ -23,7 +23,7 @@ sub test_geoip_lookup {
$self->qp->connection->remote_ip('24.24.24.24');
cmp_ok( $self->connect_handler(), '==', DECLINED, "exit code");
cmp_ok( $self->qp->connection->notes('geoip_country'), 'eq', 'US', "note");
cmp_ok( $self->connection->notes('geoip_country'), 'eq', 'US', "note");
};