#!/usr/bin/perl

use strict;
use Pod::Usage;
use Getopt::Long;

=pod

=head1 NAME

 basic_pop3_auth - POP3 authenticator for Squid

=head1 SYNOPSIS

 basic_pop3_auth server

=head1 DESCRIPTION

B<basic_pop3_auth> authenticates user credentials against a POP3 server.

=head1 OPTIONS

The only option this helper takes is the name of the POP3 server to validate against.

=head1 AUTHOR

This program was written by I<Henrik Nordstrom <henrik@henriknordstrom.net>>

This manual was written by I<Amos Jeffries <squid3@treenet.co.nz>>

=head1 COPYRIGHT

 * Copyright (C) 1996-2025 The Squid Software Foundation and contributors
 *
 * Squid software is distributed under GPLv2+ license and includes
 * contributions from numerous individuals and organizations.
 * Please see the COPYING and CONTRIBUTORS files for details.

 # Copyright (C) 2006 Henrik Nordstrom <henrik@henriknordstrom.net>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # the Free Software Foundation; either version 2 of the License, or
 # (at your option) any later version.
 #
 # This program is distributed in the hope that it will be useful,
 # but WITHOUT ANY WARRANTY; without even the implied warranty of
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 # GNU General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
 #
 # Change log:
 #   2006-12-10    henrik    Initial revision
 #

=head1 QUESTIONS

Questions on the usage of this program can be sent to the I<Squid Users mailing list <squid-users@lists.squid-cache.org>>

=head1 REPORTING BUGS

Bug reports need to be made in English.
See https://wiki.squid-cache.org/SquidFaq/BugReporting for details of what you need to include with your bug report.

Report bugs or bug fixes using https://bugs.squid-cache.org/

Report serious security bugs to I<Squid Bugs <squid-bugs@lists.squid-cache.org>>

Report ideas for new improvements to the I<Squid Developers mailing list <squid-dev@lists.squid-cache.org>>

=head1 SEE ALSO

squid (8), GPL (7),

The Squid FAQ wiki https://wiki.squid-cache.org/SquidFaq

The Squid Configuration Manual http://www.squid-cache.org/Doc/config/

=cut

use Net::POP3;
$|=1;

if ( @ARGV != 1 ) {
    print STDERR "Usage: $0 popserver\n";
    exit 1
}

my $server = shift @ARGV;

while(<>) {
    my ($username, $password) = split(/\s+/);
    $username =~ s/%([0-9a-f][0-9a-f])/pack("H2",$1)/gie;
    $password =~ s/%([0-9a-f][0-9a-f])/pack("H2",$1)/gie;

    my $pop = Net::POP3->new($server);
    if (!$pop) {
        print "ERR Server not responding\n";
        next;
    }

    # Here apop could be used instead for MD5 support
    if ($pop->login($username, $password)) {
        print "OK\n";
    } else {
        print "ERR\n";
    }
    $pop->quit;
    undef $pop;
}
