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