#!@PERL@
-##
-## Copyright (C) 1996-2014 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.
-##
-#if you define this, debugging output will be printed to STDERR.
-#$debug=1;
+use strict;
+use Pod::Usage;
+use Getopt::Long;
+
+=pod
+
+=head1 NAME
+
+ basic_msnt_multi_domain_auth
+
+=head1 SYNOPSIS
+
+ basic_msnt_multi_domain_auth [options]
+
+=head1 DESCRIPTION
+
+B<basic_msnt_multi_domain_auth> is a Squid authenticator to check
+user credentials against multiple NT domains using B<nmblookup>.
+
+The user is expected to enter his/her credentials as domain\username
+or domain/username (in analogy to what MS-Proxy does).
+
+Requires Authen::SMB from CPAN and Samba if you need to perform NETBIOS
+queries.
+
+=head1 OPTIONS
+
+=over 12
+
+=item B<--debug>
+
+Write debug info to stderr.
+
+=item B<--wins-server>
+
+Use the named WINS server.
+
+ Default: broadcast will be attempted.
+
+=item B<--no-fqdn>
+
+Some servers don't like to be called by their fully qualified name.
+Define this if you wish to call them ONLY by their hostname.
+
+=item B<--no-rdns>
+
+Some servers really really want to be called by address.
+
+=back
+
+=head1 AUTHOR
+
+This program was written by I<Francesco Chemolli <kinkie@kame.usr.dsi.unimi.it>>
+
+This manual was written by I<Amos Jeffries <squid3@treenet.co.nz>>
+
+=head1 COPYRIGHT
+
+ * Copyright (C) 1996-2014 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.
+
+=head1 QUESTIONS
+
+Questions on the usage of this program can be sent to the I<Squid Users mailing list <squid-users@squid-cache.org>>
+
+=head1 REPORTING BUGS
+
+Bug reports need to be made in English.
+See http://wiki.squid-cache.org/SquidFaq/BugReporting for details of what you need to include with your bug report.
+
+Report bugs or bug fixes using http://bugs.squid-cache.org/
+
+Report serious security bugs to I<Squid Bugs <squid-bugs@squid-cache.org>>
+
+Report ideas for new improvements to the I<Squid Developers mailing list <squid-dev@squid-cache.org>>
+
+=head1 SEE ALSO
+
+squid (8), GPL (7),
+
+The Squid FAQ wiki http://wiki.squid-cache.org/SquidFaq
+
+The Squid Configuration Manual http://www.squid-cache.org/Doc/config/
+
+=cut
#to force using some DC for some domains, fill in this hash.
#the key is a regexp matched against the domain name
#%controllers = ( ".*" => ["pdcname","bdcname"]);
-#define this if you wish to use a WINS server. If undefined, broadcast
-# will be attempted.
-#$wins_server="winsservername";
-
-# Some servers (at least mine) really really want to be called by address.
-# If this variable is defined, we'll ask nmblookup to do a reverse DNS on the
-# DC addresses. It might fail though, for instance because you have a crappy
-# DNS with no reverse zones or records. If it doesn't work, you'll have to
-# fall back to the %controllers hack.
-$try_reverse_dns=1;
-
-# Some servers (at least mine) don't like to be called by their fully
-# qualified name. define this if you wish to call them ONLY by their
-# hostname.
-$dont_use_fqdn=1;
-
#no more user-serviceable parts
+
use Authen::Smb;
#variables:
# %pdc used to cache the domain -> pdc_ip values. IT NEVER EXPIRES!
+my $debug = undef;
+my $wins_server = undef;
+my $no_rdns = undef;
+my $no_fqdn = undef;
+
+GetOptions(
+ 'debug' => \$debug,
+ 'wins-server=s' => $wins_server,
+ 'no-fqdn' => $no_fqdn,
+ 'no-rdns' => $no_rdns
+ );
$|=1;
while (<>) {
}
$lookupstring="nmblookup";
$lookupstring.=" -R -U $wins_server" if (defined($wins_server));
- $lookupstring.=" -T" if (defined($try_reverse_dns));
+ $lookupstring.=" -T" unless (defined($no_rdns));
$lookupstring.=" '$domain#1c'";
print STDERR "Discovering PDC: $lookupstring\n"
if (defined($debug));
if (m|(.*), (\d+\.\d+\.\d+\.\d+)|) {
$datum=$1;
print STDERR "matched $datum\n" if (defined($debug));
- if (defined($dont_use_fqdn) && $datum =~ /^([^.]+)\..*/) {
+ if (defined($no_fqdn) && $datum =~ /^([^.]+)\..*/) {
$datum=$1;
print STDERR "stripped domain name: $datum\n" if (defined($debug));
}