Applied to my tree as febdb001c684b3b9437fe4425e3f70785de9ba73

Robin Bowes wrote:
> 
> diff --git a/MANIFEST b/MANIFEST
> index 930ddbf..34f353a 100644
> --- a/MANIFEST
> +++ b/MANIFEST
> @@ -66,6 +66,7 @@ plugins/auth/auth_cvm_unix_local
>  plugins/auth/auth_flat_file
>  plugins/auth/auth_ldap_bind
>  plugins/auth/auth_vpopmail_sql
> +plugins/auth/auth_vpopmaild
>  plugins/auth/authdeny
>  plugins/check_badmailfrom
>  plugins/check_badmailfromto
> diff --git a/plugins/auth/auth_vpopmaild b/plugins/auth/auth_vpopmaild
> new file mode 100644
> index 0000000..e4ab940
> --- /dev/null
> +++ b/plugins/auth/auth_vpopmaild
> @@ -0,0 +1,97 @@
> +#!/usr/bin/env perl
> +
> +use strict;
> +use warnings;
> +use IO::Socket;
> +use version; my $VERSION = qv('1.0.0');
> +
> +sub register {
> +    my ($self, $qp, %args) = @_;
> +
> +    my %DEFAULT = (
> +                   host => q{localhost},
> +                   port => 89,
> +                  );
> +
> +    $self->{_vpopmaild_host} =
> +      defined $args{host} ? $args{host} : $DEFAULT{host};
> +    $self->{_vpopmaild_port} =
> +      defined $args{port} ? $args{port} : $DEFAULT{port};
> +
> +    $self->register_hook('auth-plain', 'auth_vpopmaild');
> +    $self->register_hook('auth-login', 'auth_vpopmaild');
> +}
> +
> +sub auth_vpopmaild {
> +    my ($self, $transaction, $method, $user, $passClear, $passHash, $ticket) 
> =
> +      @_;
> +
> +    # create socket
> +    my $vpopmaild_socket =
> +      IO::Socket::INET->new(
> +                            PeerAddr => $self->{_vpopmaild_host},
> +                            PeerPort => $self->{_vpopmaild_port},
> +                            Proto    => 'tcp',
> +                            Type     => SOCK_STREAM
> +                           ) or return DECLINED;
> +
> +    # Get server greeting (+OK)
> +    my $connect_response = <$vpopmaild_socket>;
> +    if (!$connect_response =~ /\+OK.*/) {
> +        return DECLINED;
> +    }
> +
> +    # send login details
> +    print $vpopmaild_socket "login $user $passClear\n\r";
> +
> +    # get response from server
> +    my $login_response = <$vpopmaild_socket>;
> +
> +    close($vpopmaild_socket);
> +
> +    # check for successful login
> +    if ($login_response =~ /\+OK.*/) {
> +        return (OK, 'authcheckpassword');
> +    }
> +    else {
> +        return DECLINED;
> +    }
> +}
> +
> +__END__
> +
> +=head1 NAME
> +
> +auth_vpopmaild - Authenticate to vpopmaild
> +
> +=head1 DESCRIPTION
> +
> +Authenticates the user against against vpopmaild [1] daemon.
> +
> +=head1 CONFIGURATION
> +
> +Add a line to C<config/plugins> as follows:
> +
> +auth_vpopmaild
> +
> +By default, the plugin connects to localhot on port 89. If your vpopmaild
> +daemon is running on a different host or port, specify as follows:
> +
> +auth_vpopmaild host [host] port [port]
> +
> +=head1 LINKS
> +
> +[1] http://www.qmailwiki.org/Vpopmaild
> +
> +=head1 AUTHOR
> +
> +Robin Bowes <robin.bo...@yo61.com>
> +
> +=head1 COPYRIGHT AND LICENSE
> +
> +Copyright (c) 2010 Robin Bowes
> +
> +This plugin is licensed under the same terms as the qpsmtpd package itself.
> +Please see the LICENSE file included with qpsmtpd for details.
> +
> +=cut

Reply via email to