.\" Automatically generated by Pod::Man 4.11 (Pod::Simple 3.35)
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings. \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote. \*(C+ will
.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
.\" nothing in troff, for use with C<>.
.tr \(*W-
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
. ds -- \(*W-
. ds PI pi
. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
. ds L" ""
. ds R" ""
. ds C` ""
. ds C' ""
'br\}
.el\{\
. ds -- \|\(em\|
. ds PI \(*p
. ds L" ``
. ds R" ''
. ds C`
. ds C'
'br\}
.\"
.\" Escape single quotes in literal strings from groff's Unicode transform.
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\"
.\" If the F register is >0, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
.\" entries marked with X<> in POD. Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.\"
.\" Avoid warning from groff about undefined register 'F'.
.de IX
..
.nr rF 0
.if \n(.g .if rF .nr rF 1
.if (\n(rF:(\n(.g==0)) \{\
. if \nF \{\
. de IX
. tm Index:\\$1\t\\n%\t"\\$2"
..
. if !\nF==2 \{\
. nr % 0
. nr F 2
. \}
. \}
.\}
.rr rF
.\" ========================================================================
.\"
.IX Title "LWP::Authen::Ntlm 3"
.TH LWP::Authen::Ntlm 3 "2022-01-21" "perl v5.26.3" "User Contributed Perl Documentation"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
LWP::Authen::Ntlm \- Library for enabling NTLM authentication (Microsoft) in LWP
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 3
\& use LWP::UserAgent;
\& use HTTP::Request::Common;
\& my $url = \*(Aqhttp://www.company.com/protected_page.html\*(Aq;
\&
\& # Set up the ntlm client and then the base64 encoded ntlm handshake message
\& my $ua = LWP::UserAgent\->new(keep_alive=>1);
\& $ua\->credentials(\*(Aqwww.company.com:80\*(Aq, \*(Aq\*(Aq, "MyDomain\e\eMyUserCode", \*(AqMyPassword\*(Aq);
\&
\& $request = GET $url;
\& print "\-\-Performing request now...\-\-\-\-\-\-\-\-\-\-\-\en";
\& $response = $ua\->request($request);
\& print "\-\-Done with request\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\en";
\&
\& if ($response\->is_success) {print "It worked!\->" . $response\->code . "\en"}
\& else {print "It didn\*(Aqt work!\->" . $response\->code . "\en"}
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
LWP::Authen::Ntlm allows \s-1LWP\s0 to authenticate against servers that are using the
\&\s-1NTLM\s0 authentication scheme popularized by Microsoft. This type of authentication is
common on intranets of Microsoft-centric organizations.
.PP
The module takes advantage of the Authen::NTLM module by Mark Bush. Since there
is also another Authen::NTLM module available from \s-1CPAN\s0 by Yee Man Chan with an
entirely different interface, it is necessary to ensure that you have the correct
\&\s-1NTLM\s0 module.
.PP
In addition, there have been problems with incompatibilities between different
versions of Mime::Base64, which Bush's Authen::NTLM makes use of. Therefore, it is
necessary to ensure that your Mime::Base64 module supports exporting of the
\&\f(CW\*(C`encode_base64\*(C'\fR and \f(CW\*(C`decode_base64\*(C'\fR functions.
.SH "USAGE"
.IX Header "USAGE"
The module is used indirectly through \s-1LWP,\s0 rather than including it directly in your
code. The \s-1LWP\s0 system will invoke the \s-1NTLM\s0 authentication when it encounters the
authentication scheme while attempting to retrieve a \s-1URL\s0 from a server. In order
for the \s-1NTLM\s0 authentication to work, you must have a few things set up in your
code prior to attempting to retrieve the \s-1URL:\s0
.IP "\(bu" 4
Enable persistent \s-1HTTP\s0 connections
.Sp
To do this, pass the \f(CW"keep_alive=>1"\fR option to the LWP::UserAgent when creating it, like this:
.Sp
.Vb 1
\& my $ua = LWP::UserAgent\->new(keep_alive=>1);
.Ve
.IP "\(bu" 4
Set the credentials on the UserAgent object
.Sp
The credentials must be set like this:
.Sp
.Vb 1
\& $ua\->credentials(\*(Aqwww.company.com:80\*(Aq, \*(Aq\*(Aq, "MyDomain\e\eMyUserCode", \*(AqMyPassword\*(Aq);
.Ve
.Sp
Note that you cannot use the HTTP::Request object's \f(CW\*(C`authorization_basic()\*(C'\fR method to set
the credentials. Note, too, that the \f(CW\*(Aqwww.company.com:80\*(Aq\fR portion only sets credentials
on the specified port \s-1AND\s0 it is case-sensitive (this is due to the way \s-1LWP\s0 is coded, and
has nothing to do with LWP::Authen::Ntlm)
.SH "AVAILABILITY"
.IX Header "AVAILABILITY"
General queries regarding \s-1LWP\s0 should be made to the \s-1LWP\s0 Mailing List.
.PP
Questions specific to LWP::Authen::Ntlm can be forwarded to jtillman@bigfoot.com
.SH "COPYRIGHT"
.IX Header "COPYRIGHT"
Copyright (c) 2002 James Tillman. All rights reserved. This
program is free software; you can redistribute it and/or modify it
under the same terms as Perl itself.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\s-1LWP\s0, LWP::UserAgent, lwpcook.