qpsmtpd/plugins/saslauth

58 lines
1.6 KiB
Plaintext
Raw Normal View History

#
# 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;
}
}