Skip to content

Commit

Permalink
Add not even halfbaked saslauth plugin. Hopefully it'll give us
Browse files Browse the repository at this point in the history
  SMTP AUTH some day.  :-)

  If a plugin running the ehlo hook add something to the ARRAY
  reference $self->transaction->notes('capabilities') then it will be
  added to the EHLO response.

  Add command_counter method to the SMTP object.  Plugins can use this
  to catch (or not) consecutive commands.  In particular useful with
  the unrecognized_command hook.


git-svn-id: https://svn.perl.org/qpsmtpd/trunk@144 958fd67b-6ff1-0310-b445-bb7760255be9
  • Loading branch information
abh committed Apr 21, 2003
1 parent cd60b5c commit c2b8e8a
Show file tree
Hide file tree
Showing 3 changed files with 76 additions and 1 deletion.
8 changes: 8 additions & 0 deletions Changes
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
0.26-dev

If a plugin running the ehlo hook add something to the ARRAY
reference $self->transaction->notes('capabilities') then it will be
added to the EHLO response.

Add command_counter method to the SMTP object. Plugins can use this
to catch (or not) consecutive commands. In particular useful with
the unrecognized_command hook.

Filter out all uncommon characters from the remote_host
setting. (thanks to Frank Denis / Jedi/Sector One for the hint).

Expand Down
12 changes: 11 additions & 1 deletion lib/Qpsmtpd/SMTP.pm
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,17 @@ sub new {
$self;
}


sub command_counter {
my $self = shift;
$self->{_counter} || 0;
}

sub dispatch {
my $self = shift;
my ($cmd) = lc shift;

$self->{_counter}++;

#$self->respond(553, $state{dnsbl_blocked}), return 1
# if $state{dnsbl_blocked} and ($cmd eq "rcpt");

Expand Down Expand Up @@ -157,11 +162,16 @@ sub ehlo {
$conn->hello_host($hello_host);
$self->transaction;

my @capabilities = $self->transaction->notes('capabilities')
? @{ $self->transaction->notes('capabilities') }
: ();

$self->respond(250,
$self->config("me") . " Hi " . $conn->remote_info . " [" . $conn->remote_ip ."]",
"PIPELINING",
"8BITMIME",
($self->config('databytes') ? "SIZE ". ($self->config('databytes'))[0] : ()),
@capabilities,
);
}
}
Expand Down
57 changes: 57 additions & 0 deletions plugins/saslauth
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@

#
# This plugin doesn't work at all yet! Really; it's not even a
# prototype. More like a skeleton with no bones. Patches welcome.
#

=pod

TODO:

After an AUTH command has successfully completed, no more AUTH
commands may be issued in the same session. After a successful
AUTH command completes, a server MUST reject any further AUTH
commands with a 503 reply.

The AUTH command is not permitted during a mail transaction.

If the client wishes to cancel an authentication exchange, it issues a line
with a single "*". If the server receives such an answer, it
MUST reject the AUTH command by sending a 501 reply.

=cut


sub register {
my ($self, $qp) = @_;
$self->register_hook("ehlo", "ehlo");
$self->register_hook("unrecognized_command", "auth");
}

sub ehlo {
my ($self, $transaction, $host) = @_;
$transaction->notes('capabilities'); # or
$transaction->notes('capabilities', []);
my $capabilities = $transaction->notes('capabilities');
push @{$capabilities}, 'AUTH PLAIN LOGIN DIGEST-MD5 PLAIN';
}

sub auth {
my ($self, $transaction, $command) = @_;
return DECLINED unless $self->{expecting_response} or $command eq "auth";

if ($command eq "auth") {
warn "COMMAND: $command";
$self->qp->respond(334, "VXNlcm5hbWU6");
$self->{expecting_response} = $self->qp->command_counter;
return DONE;
}
else {
$self->{expecting_response}+1 == $self->qp->command_counter
or return DECLINED;
# check the response
$self->qp->respond(123, "Something should go here...");
return DONE;
}
}

0 comments on commit c2b8e8a

Please sign in to comment.