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