Authen-NTLM-HTTP
view release on metacpan or search on metacpan
lib/Authen/NTLM/HTTP.pm view on Meta::CPAN
####################################################################
# http_negotiate creates a NTLM-over-HTTP tag line for NTLM #
# negotiate packet given the domain (from Win32::DomainName()) and #
# the workstation name (from $ENV{'COMPUTERNAME'} or #
# Win32::NodeName()) and the negotiation flags. #
####################################################################
sub http_negotiate($$)
{
my $self = shift;
my $flags = shift;
my $str = encode_base64($self->SUPER::negotiate_msg($flags));
$str =~ s/\s//g;
return "Authorization: NTLM " . $str;
}
###########################################################################
# http_parse_negotiate parses the NTLM-over-HTTP negotiate tag line and #
# return a list of NTLM Negotiation Flags, Server Network Domain and #
# Machine name of the client. #
###########################################################################
sub http_parse_negotiate($$)
{
my ($self, $pkt) = @_;
$pkt =~ s/Authorization: NTLM //;
my $str = decode_base64($pkt);
return $self->SUPER::parse_negotiate($str);
}
####################################################################
# http_challenge composes the NTLM-over-HTTP challenge tag line. It#
# takes NTLM Negotiation Flags as an argument. #
####################################################################
sub http_challenge($$)
{
my $self = $_[0];
my $flags = $_[1];
my $nonce = undef;
my $str;
$nonce = $_[2] if @_ == 3;
if (defined $nonce) {
$str = encode_base64($self->SUPER::challenge_msg($flags, $nonce));
}
else {
$str = encode_base64($self->SUPER::challenge_msg($flags));
}
$str =~ s/\s//g;
return $self->{'type'} . "-Authenticate: NTLM " . $str;
}
###########################################################################
# http_parse_challenge parses the NTLM-over-HTTP challenge tag line and #
# return a list of server network domain, NTLM Negotiation Flags, Nonce, #
# ServerContextHandleUpper and ServerContextHandleLower. #
###########################################################################
sub http_parse_challenge
{
my ($self, $pkt) = @_;
my $str = $self->{'type'} . "-Authenticate: NTLM ";
$pkt =~ s/$str//;
$str = decode_base64($pkt);
return $self->SUPER::parse_challenge($str);
}
###########################################################################
# http_auth creates the NTLM-over-HTTP response to an NTLM challenge from #
# the server. It takes 2 arguments: $nonce obtained from parse_challenge #
# and NTLM Negotiation Flags. This function ASSUMEs the input of user #
# domain, user name and workstation name are in ASCII format and not in #
# UNICODE format. #
###########################################################################
sub http_auth($$$)
{
my $self = shift;
my $nonce = shift;
my $flags = shift;
my $str = encode_base64($self->SUPER::auth_msg($nonce, $flags));
$str =~ s/\s//g;;
if ($self->{'type'} eq NTLMSSP_HTTP_PROXY) {
return "Proxy-Authorization: NTLM " . $str;
}
else {
return "Authorization: NTLM " . $str;
}
}
###########################################################################
lib/Authen/NTLM/HTTP.pm view on Meta::CPAN
sub http_parse_auth($$)
{
my ($self, $pkt) = @_;
if ($self->{'type'} eq NTLMSSP_HTTP_PROXY) {
$pkt =~ s/Proxy-Authorization: NTLM //;
}
else {
$pkt =~ s/Authorization: NTLM //;
}
my $str = decode_base64($pkt);
return $self->SUPER::parse_auth($str);
}
1;
__END__
=head1 NAME
Authen::NTLM::HTTP - Perl extension for NTLM-over-HTTP related computations
( run in 0.329 second using v1.01-cache-2.11-cpan-a9ef4e587e4 )