On Thursday 18 May 2006 21:10, Achim Grolms wrote:

> How can that "use the sasl-objetcs interface only" be done with
> Net::POP3?

I have no GSSAPI enabeled POP3 Server to test, but my idea is to add
a authsasl() method to Net::POP3 that accepts the Authen::SASL object.
Does that work? I have no chance to test it myself at the moment:

#------usage example--------------
use Authen::SASL 2.10;
use Net::POP3;

my $sasl = Authen::SASL->new( mechanism => 'GSSAPI' );
$pop = Net::POP3->new('pop3host');
$pop->authsasl($sasl);

my $msgnums = $pop->list; # hashref of msgnum => size
foreach my $msgnum (keys %$msgnums) {
    my $msg = $pop->get($msgnum);
    print @$msg;
}
$pop->quit;
#------end of usage example--------------



#--------changes to Net::POP3--------------------
# add this to Net::POP3 pm-file
#

sub authsasl {
    my ($self, $sasl) = @_;

    eval {
 require MIME::Base64;
    } or $self->set_status(500,["Need MIME::Base64 todo auth"]), return 0;


    my $client = $sasl->client_new('pop3',${*$self}{'net_pop3_host'},0);
    my $str    = $client->client_start;

    my @cmd = ("AUTH", $client->mechanism);
    my $code;

    push @cmd, MIME::Base64::encode_base64($str,'')
      if defined $str and length $str;

    while (($code = $self->command(@cmd)->response()) == CMD_MORE) {
      @cmd = (MIME::Base64::encode_base64(
 $client->client_step(
   MIME::Base64::decode_base64(
     ($self->message)[0]
   )
 ), ''
      ));
    }

    $code == CMD_OK;
}
#--------end of changes to Net::POP3--------------------

Reply via email to