Apache-AuthCookieNTLM
view release on metacpan or search on metacpan
12345678910Revision history
for
Perl extension Apache::AuthCookieNTLM
0.07 Sat Sep 3 2004
- Applied patch from Steve Keay
for
'POST'
data
0.06 Mon Nov 11 10:11 2003
- Changed the way this module should be inherited (see docs)
as I'd forgotten about the global, much cleaner now.
- Found bug in the way I
'd suggested to inherit - it didn'
t
work!
2223242526272829303132
- First CPAN release
- Clean up code & docs
- Add debuging
- Added domain and secure cookie settings
0.02 Wed Nov 5 17:22 2003
- First public release
0.01 Tue Nov 4 11:05:31 2003
- original version; created by h2xs 1.21
with
options
-A -X -n Apache::AuthCookieNTLM
1234567lib/Apache/AuthCookieNTLM.pm
Changes
Makefile.PL
MANIFEST
README
test.pl
META.yml Module meta-data (added by MakeMaker)
1234567891011121314#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX#
name: Apache-AuthCookieNTLM
version: 0.07
version_from: lib/Apache/AuthCookieNTLM.pm
installdirs: site
requires:
Apache::Constants: 0.01
Test::More: 0.01
Apache::AuthenNTLM: 2.07
Apache::Cookie: 0.01
Apache::Request: 0.01
distribution_type: module
generated_by: ExtUtils::MakeMaker version 6.12
Makefile.PL view on Meta::CPAN
12345678910111213141516use
ExtUtils::MakeMaker;
# See lib/ExtUtils/MakeMaker.pm for details of how to influence
# the contents of the Makefile that is written.
WriteMakefile(
'NAME'
=>
'Apache::AuthCookieNTLM'
,
'VERSION_FROM'
=>
'lib/Apache/AuthCookieNTLM.pm'
,
# finds $VERSION
'PREREQ_PM'
=> {
'Test::More'
=> 0.01,
'Apache::AuthenNTLM'
=> 2.07,
'Apache::Request'
=> 0.01,
'Apache::Cookie'
=> 0.01,
'Apache::Constants'
=> 0.01,
},
# e.g., Module::Name => 1.1
($] >= 5.005 ?
## Add these new keywords supported since 5.005
(
AUTHOR
=>
'Leo Lapworth <llap@cuckoo.org>, Francoise Dehinbo'
) : ()),
);
123456789101112131415161718Apache/AuthCookieNTLM version 0.06
==================================
As explained in the Apache::AuthenNTLM module, depending on the user's
config, IE will supply your Windows logon credentials to the web server
when
the server asks
for
NTLM authentication. This saves the user typing in
their windows login and password.
Apache::AuthCookieNTLM is an interface to Shannon Peevey's
Apache::AuthenNTLM module. The main aim is to authenticate a user
using their Windows login and authenticating against the Windows
PDC, but to also store their login name into a cookie. This means
that it can be accessed from other pages and stops the
system
having to authenticate
for
every request.
INSTALLATION
To install this module type the following:
222324252627282930313233343536373839
make test
make install
DEPENDENCIES
This module requires these other modules and libraries:
'Test::More'
=> 0.01,
'Apache::AuthenNTLM'
=> 2.07,
'Apache::Request'
=> 0.01,
'Apache::Cookie'
=> 0.01,
COPYRIGHT AND LICENCE
This module is free software; you can redistribute it or modify it
under the same terms as Perl itself.
Copyright (C) 2003 Leo Lapworth <llap
@cuckoo
.org>, Francoise Dehinbo
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
123456789101112131415161718192021package
Apache::AuthCookieNTLM;
# Small wrapper to Apache::AuthenNTLM to store user login details to cookie
# and reduce the number of PDC requests.
use
strict;
use
Data::Dumper;
use
Apache::Request;
use
Apache::Cookie;
use
Apache::AuthenNTLM;
$VERSION
= 0.07;
# Global to store stuff in
my
$cookie_values
= {};
sub
handler ($$) {
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
27282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
# Get server config
my
%config
;
foreach
my
$var
(
qw(Expires Path Domain Secure Name)
) {
$config
{
lc
(
$var
)} =
$r
->dir_config(
"$auth_name$var"
) ||
undef
;
}
my
$debug
=
$r
->dir_config(
'ntlmdebug'
) || 0;
# Set cookie name
my
$cname
=
$config
{name} ||
$auth_type
.
'_'
.
$auth_name
;
STDERR
"AuthCookieNTLM - Looking for Cookie Name: $cname\n"
if
$debug
> 0;
# Look for cookie
my
$t
= Apache::Request->new(
$self
);
my
%cookiejar
= Apache::Cookie->new(
$t
)->parse;
if
(!
defined
$cookiejar
{
$cname
}
or (
$r
->method eq
'POST'
and
$r
->header_in(
'content-length'
) == 0)){
# Don't have the cookie, try authenticate
my
$v
= Apache::AuthenNTLM::handler (
$self
,
$r
);
if
(
$v
== 0 &&
$cookie_values
ne {}) {
# Set the cookie as we have user details
my
$cookie
= Apache::Cookie->new(
$r
,
-name
=>
$cname
,
-value
=>
$cookie_values
,
-path
=>
$config
{
'path'
} ||
"/"
,
);
$cookie
->expires(
$config
{
'expires'
})
if
defined
$config
{
'expires'
};
$cookie
->domain(
$config
{
'domain'
})
if
defined
$config
{
'domain'
};
$cookie
->secure(
'1'
)
if
defined
$config
{
'secure'
};
# Set the cookie to header
$r
->header_out(
'Set-Cookie'
=>
$cookie
->bake());
if
(
$debug
> 0) {
STDERR
"AuthCookieNTLM - Setting Cookie Expire: "
.
$config
{
'expires'
} .
"\n"
if
$debug
> 0 &&
defined
$config
{
'expires'
};
STDERR
"AuthCookieNTLM - Setting Cookie Domain: "
.
$config
{
'domain'
} .
"\n"
if
$debug
> 0 &&
defined
$config
{
'domain'
};
STDERR
"AuthCookieNTLM - Setting Cookie Secure: "
.
$config
{
'secure'
} .
"\n"
if
$debug
> 1 &&
defined
$config
{
'secure'
};
STDERR
"AuthCookieNTLM - Setting Cookie values: "
. Dumper(
$cookie_values
) .
"\n"
if
$debug
> 1;
}
}
# AuthenNTLM loops so have to behave like it does
# and return $v
return
$v
;
}
else
{
STDERR
"AuthCookieNTLM - Found Cookies for '$cname'\n"
if
$debug
> 0;
my
%c
=
$cookiejar
{
$cname
}->parse();
if
(
defined
$c
{
$cname
}) {
STDERR
"AuthCookieNTLM - Cookie Matched \n"
if
$debug
> 1;
my
%v
=
$c
{
$cname
}->value();
STDERR
"AuthCookieNTLM - Cookie values "
. Dumper(\
%v
) .
"\n"
if
$debug
> 1;
if
(
defined
$v
{
'username'
} &&
defined
$v
{
'userdomain'
}) {
my
$user
=
lc
(
$v
{
'userdomain'
} .
'\\'
.
$v
{
'username'
});
$r
->user(
$user
)
if
ref
(
$r
) eq
'Apache'
;
STDERR
"AuthCookieNTLM - REMOVE_USER SET: "
.
$user
.
"\n"
if
$debug
> 1;
}
}
}
return
OK;
}
sub
check_cookie {
my
$self
=
shift
;
return
1
if
(
$cookie_values
eq {} ||
$cookie_values
->{username} ne
$self
->{username} );
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
128129130131132133134135136137138139140141142143144145146147148149150151152153154155
return
lc
(
"$self->{userdomain}\\$self->{username}"
);
}
1;
__END__
=head1 NAME
Apache::AuthCookieNTLM - NTLM (Windows domain) authentication with cookies
=head1 SYNOPSIS
'WhatEver' should be replaced with the AuthName you choose
for this location's authentication.
<Location />
PerlAuthenHandler Apache::AuthCookieNTLM
# NTLM CONFIG
AuthType ntlm,basic
AuthName WhatEver
require valid-user
# domain pdc bdc
PerlAddVar ntdomain "name_domain1 name_of_pdc1"
PerlAddVar ntdomain "other_domain pdc_for_domain bdc_for_domain"
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
</Location>
=head1 DESCRIPTION
As explained in the Apache::AuthenNTLM module, depending on the user's
config, IE will supply your Windows logon credentials to the web server
when the server asks for NTLM authentication. This saves the user typing in
their windows login and password.
Apache::AuthCookieNTLM is an interface to Shannon Peevey's
Apache::AuthenNTLM module. This modules authenticates a user
using their Windows login against the Windows PDC, but to also
stores their login name into a cookie. This means that it can be
accessed from other pages and stops the system having to
authenticate for every request.
We did consider using Apache::AuthCookie to store the details in a
cookie but since using NTLM is basicaly there to remove the need
to login and is almost exclusively for intranets (as it needs access
to the PDC), we decided it was feasible not to use it.
=head1 APACHE CONFIGURATION
Please consult the Apache::AuthenNTLM documentation for more details on
the NTLM configuration.
'WhatEver' should be replaced with the AuthName you choose
for this location's authentication.
=head2 PerlSetVar WhatEverName
Sets the cookie name. This will default to
Apache::AuthCookieNTLM_WhatEver.
=head2 PerlSetVar WhatEverExpires
Sets the cookie expiry time. This defaults to being
a session only cookie.
=head2 PerlSetVar WhatEverPath
Sets the path that can retrieve the cookie. The default is /.
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
229230231232233234235236237238239240241242243244245246247248249The method can be overwritten to set the
values
stored in the cookie
=head2 Example for overriding
This is an example of how to set your cookie values with whatever
data you want.
package MYAuthenNTLM;
use Apache::AuthCookieNTLM;
use base ( 'Apache::AuthCookieNTLM' );
use MyUserLookup_Package;
sub choose_cookie_values {
my ($self,$r) = @_;
# Save if it's not already set
if ($self->check_cookie()) {
# Look up against other sources
my $person = MyUserLookup_Package->new($self->{'username'});
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
274275276277278279280281282283284285286287288289290291292293294'Tools'
->
'Internet Options'
->
'Security'
->
'Local Intranet'
->
'Sites'
->
'Advanced'
and add it in there, this must start
with
http:// or https://
Once this is working you should be able to just replace
PerlAuthenHandler Apache::AuthenNTLM
with
PerlAuthenHandler Apache::AuthCookieNTLM
And have it all just work[tm].
Remember to quit IE and reload as it's crap at implementing
changes on the fly!
=head2 Not setting cookies
IE doesn't seem to alert you (if you've turned prompt on
for cookies). We guess it's because its from the trusted site.
lib/Apache/AuthCookieNTLM.pm view on Meta::CPAN
298299300301302303304305306307308309310311312313314315=head2 access to /test failed in error log - but it works
Because Apache::AuthenNTLM has to go through several loops
the first of which will fail, this will be reported in
your error log, but you can just ignore it.
=head1 SEE ALSO
L<Apache::AuthenNTLM>,
L<Apache::Cookie>,
L<CGI::Cookie>
=head1 AUTHOR
Leo Lapworth <llap@cuckoo.org>, Francoise Dehinbo
=cut
1234567BEGIN { use_ok(
'Apache::AuthCookieNTLM'
); }
# What more can you do!
( run in 0.284 second using v1.01-cache-2.11-cpan-00829025b61 )