John Simpson said the following on 29/11/2005 01:21: > googling for "qpsmtpd vpopmaild" only brings back two archived posts > from this mailing list- and i think you wrote both of them. is there a > URL where i can look at the code? i won't be able to directly copy it > (my patch will be in C rather than perl) but having a known reference > to look at will help me to make sure i'm on the right track.
It's not available anywhere yet. Here's the auth sub: sub auth_vpopmaild { my ( $self, $transaction, $method, $user, $passClear, $passHash, $ticket ) = @_; # Read these from a config file my $vpopmaild_host = 'localhost'; my $vpopmaild_port = 89; # create socket my $vpopmaild_socket = IO::Socket::INET->new(PeerAddr => $vpopmaild_host, PeerPort => $vpopmaild_port, Proto => "tcp", Type => SOCK_STREAM) or 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); } } It's about as simple as it could get! >>> and my own >>> "validrcptto.cdb" patch (which rejects mail sent to non-existent >>> mailboxes, uses a cdb file containing every valid email address on the >>> system, and correctly handles "-default" aliases... http:// >>> qmail.jms1.net/patches/validrcptto.cdb.shtml has more information >>> about >>> the patch.) >> >> >> ... and it would be nice to add a validrcptto plugin using vpopmaild. > > > one of the reasons i wrote it to use a cdb file was that the cdb file > could be scp'd out to "mailhubs", which would be able to reject mail to > non-existent mailboxes in domains which exist, without having to call > back to the mailbox server at all. sure, there's a delay between the > mailbox being added (or password being changed) and the servers > "knowing" about the change, but you can use a cron job or a background > service to compare timestamps and rebuild and copy cdb files as needed- > my own server sees any changes within fifteen seconds. > > as for writing a plug-in for validrcptto... it would actually be really > easy in perl. the trick is to correctly handle "-default" aliases, and > that's just a loop which does regex transforms to walk through a series > of addresses... > > [EMAIL PROTECTED] (the original address) > [EMAIL PROTECTED] > [EMAIL PROTECTED] > [EMAIL PROTECTED] > @domain.xyz (if the domain's .qmail-default !~ /vdelivermail.*bounce > \-no\-mailbox/ ) > > it tries each address in turn. once it finds a match (from a cdb file, > a libvpopmail function, a courier-authlib function, or whatever flavour > of voodoo you practice) it accepts the recipient. if it reaches the end > of the list without finding any matches, the recipient is rejected. if > you look at qmail-smtpd.c with the validrcptto.cdb patch, the logic is > there in the vrtcheck() function (it's in C, and uses djb's string > functions, but once you get used to them the logic is fairly > straightforward.) There is already such a plugin for qpsmtpd - I was just pointing out that something that talks to vpopmaild would be a nice solution. R. -- http://robinbowes.com If a man speaks in a forest, and his wife's not there, is he still wrong?