Getting multiple header entries from AuthCookie returned to the
client. This happens even if I stub out the authen_cred and
authen_ses_key to return "foo". Other thing I notice after
adding logging to the authentication and authorization sub's
is that the $r->connection->user set by authentication isn't
available in $r->connection->user in authorization. As a
result of the undef $r->connection->user in authorization
it's sending back a FORBIDDEN which [I think?] causes the
problems.
The examples I've seen of login_form code use a simple print to
get things on the screen (e.g., Apache::AuthTicket).
I've tried this and various combinations of sending the headers
and form with no luck.
Ideally Apache::AuthCookie should only require the login_form,
authen_cred and authen_ses_key sub's to function with the
addition of login_screen to use a location rather rather than
#!-ed code for the login form.
Does anyone know of a simple, working example of deriving a
class from Apache::AuthTicket or some specific documentation
for a complete class? The code that comes with it is only
useful for testing
Below are the relavant error_log items (showing the user
available in authenticate and undef in authorize).
thanx.
sl
########################################################################
# Authorization cookie handler.
########################################################################
PerlModule Cdr::AuthCookie;
PerlSetVar CDRPath /foo
PerlSetVar CDRLoginScript /cdrloginform
PerlSetVar CDRLoginHandler /cdrlogin
#PerlSetVar CDRExpires +8h
PerlSetVar AuthCookieDebug 9
# this shows the login form.
<Location /cdrloginform>
SetHandler perl-script
PerlHandler Cdr::AuthCookie->login_form
</Location>
# handle posted data from the login form.
<location /cdrlogin>
SetHandler perl-script
AuthType Cdr::AuthCookie
AuthName CDR
PerlHandler Cdr::AuthCookie->login
</Location>
<Location /foo>
SetHandler perl-script
AuthType Cdr::AuthCookie
AuthName CDR
PerlAuthenHandler Cdr::AuthCookie->authenticate
PerlAuthzHandler Cdr::AuthCookie->authorize
PerlHandler Cdr::Hello
require valid-user
</Location>
<Location /foo/bar>
SetHandler perl-script
AuthType Cdr::AuthCookie
AuthName CDR
PerlAuthenHandler Cdr::AuthCookie->authenticate
PerlAuthzHandler Cdr::AuthCookie->authorize
PerlHandler Cdr::Hello
require valid-user
</Location>
###########################################################################
# Cdr::AuthCookie.pm
###########################################################################
package Cdr::AuthCookie;
use strict;
use base qw( Apache::AuthCookie );
local $\ = "\n";
local $, = "\n";
# CPAN modules
use Carp;
use Apache::Constants qw(:common M_GET M_POST FORBIDDEN REDIRECT);
use Apache::Log;
use Digest::MD5 qw( &md5_hex );
# used for sharing and generating the shared secret
# used in the authrization process.
use IPC::SysV;
use IPC::Shareable;
use Digest::MD5 qw( &md5_hex );
use Data::Dumper;
$Data::Dumper::Purity = 1;
$Data::Dumper::Terse = 1;
$Data::Dumper::Indent = 1;
$Data::Dumper::Deepcopy = 0;
$Data::Dumper::Quotekeys = 0;
# homegrown modules
use Cdr::Reportz;
use Cdr::Shared qw( &logrequest &sendreply );
########################################################################
# package variables
########################################################################
# initialize the untied variable to false, use $key to check the status.
our $secret = '';
our $key = '';
# amount of time before a cookie times out.
# currently set to 8 hours (28 800 sec).
#
# 10 sec for testing only, probably useful in production.
my $timeout = 30; #28800;
# login screen returns this to the caller.
my $loginform = <<'END';
<html>
<head>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<base href="$ENV{BASEURL}" >
</head>
<body>
<form method="get" action="/cdrlogin" >
<!-- Login form for an Cdr::AuthCookie -->
<input type=hidden name="destination" value="DEST" >
<table>
<tr>
<th align=center colspan=2 >Please Enter Your Username and Password to
log in:"
<tr>
<th align=right >Username:
<td align=left > <input type="text" name="credential_0" size=12
maxlenth=12 >
<tr>
<th align=right >Password:
<td align=left > <input type="password" name="credential_1" size=12
maxlenth=12 >
<tr>
<td><!-- filler -->
<td align=left ><input type="submit" value=" Log In " >
</table>
</form>
</body>
END
########################################################################
# subroutines
########################################################################
=head2 sub B<hashcookie>
Trick here is to hash the information with a secret and then
hash the hash with the values. This makes it virtually
impossible for someone to tickle bits in the original items
to get a matching hash. It also makes it nearly impossible
for someone to guess the secret since the hash that includes
the secret is hashed again with the data a second time.
This is used both to validate the string and to generate
a new one.
=cut
sub hashcookie
{
join '-', @_, md5_hex( join '', @_, md5_hex( join '', @_, $secret ) );
}
# stubbed out authen_cred and authen_ses_key. these definatly always
# return a key and always return a userid. only problem is that they
# don't work...
sub authen_cred( $$\@ ) { "foo" }
sub authen_ses_key( $$$ ) { "foo" }
=head1 sub B<login_form>
Generate login screen.
This has to define where the user was headed when they
bounced into the Authorization handler and put this into
the hidden field "destination".
=cut
sub login_form
{
my( $class, $request ) = @_;
my $log = logrequest $request, __PACKAGE__ . '::login_form';
my $desturi = $request->uri;
( my $form = $loginform ) =~ s{DEST}{$desturi};
$request->no_cache( 1 );
$log->debug( "Reply:\n\n$form\n" );
$request->send_http_header( 'text/html' );
$request->print( $form );
OK
}
# override the standard version in order to pass the second argument
# to login_form.
sub authenticate ($$)
{
my ($auth_type, $r) = @_;
my ($authen_script, $auth_user);
my $debug = $r->dir_config("AuthCookieDebug") || 0;
my $log = logrequest $r, __PACKAGE__ . '::authenticate';
$r->log_error("auth_type " . $auth_type) if ($debug >= 3);
# Only authenticate the first internal request
return OK unless $r->is_initial_req;
if ($r->auth_type ne $auth_type)
{
# This location requires authentication because we are being called,
# but we don't handle this AuthType.
$r->log_error("AuthType mismatch: $auth_type =/= ".$r->auth_type) if
$debug >= 3;
return DECLINED;
}
# Ok, the AuthType is $auth_type which we handle, what's
# the authentication realm's name?
my $auth_name = $r->auth_name;
$r->log_error("auth_name " . $auth_name) if $debug >= 2;
unless ($auth_name)
{
$r->log_reason("AuthName not set, AuthType=$auth_type", $r->uri);
return SERVER_ERROR;
}
# Get the Cookie header. If there is a session key for this realm, strip
# off everything but the value of the cookie.
my ($ses_key_cookie) =
($r->header_in("Cookie") || "") =~ /$auth_type\_$auth_name=([^;]+)/;
$ses_key_cookie = "" unless defined($ses_key_cookie);
$r->log_error("ses_key_cookie " . $ses_key_cookie) if ($debug >= 1);
$r->log_error("uri " . $r->uri) if ($debug >= 2);
if ($ses_key_cookie)
{
if ($auth_user = $auth_type->authen_ses_key($r, $ses_key_cookie))
{
# We have a valid session key, so we return with an OK value.
# Tell the rest of Apache what the authentication method and
# user is.
$r->log_error("user authenticated as $auth_user") if
$debug >= 1;
$r->connection->auth_type($auth_type);
$r->connection->user($auth_user);
$r->log_error("user set to " . $r->connection->user );
return OK;
}
else
{
# There was a session key set, but it's invalid for some
reason. So,
# remove it from the client now so when the credential data is
posted
# we act just like it's a new session starting.
my $str =
$auth_type->cookie_string
(
request => $r,
key => "$auth_type\_$auth_name",
value => '',
expires => 'Mon, 21-May-1971 00:00:00 GMT'
);
$r->err_headers_out->add("Set-Cookie" => "$str");
$r->log_error("set_cookie " .
$r->err_header_out("Set-Cookie")) if $debug >= 2;
$r->subprocess_env('AuthCookieReason', 'bad_cookie');
}
}
else
{
$r->log_error("no cookie" ) if $debug >= 2;
$r->subprocess_env('AuthCookieReason', 'no_cookie');
}
# They aren't authenticated, and they tried to get a protected
# document. Send them the authen form.
return $auth_type->login_form( $r );
}
sub authorize ($$)
{
my ($auth_type, $r) = @_;
my $debug = $r->dir_config("AuthCookieDebug") || 0;
my $log = logrequest $r, __PACKAGE__ . '::authorize', { user =>
$r->connection->user };
return OK unless $r->is_initial_req; #only the first internal request
if ($r->auth_type ne $auth_type)
{
$r->log_error($auth_type . " auth type is " . $r->auth_type)
if ($debug >= 3);
return DECLINED;
}
my $reqs_arr = $r->requires or return DECLINED;
my $user = $r->connection->user;
unless ($user)
{
# user is either undef or =0 which means the authentication failed
$r->log_reason("No user authenticated.", $r->uri);
return FORBIDDEN;
}
my ($forbidden);
foreach my $req (@$reqs_arr)
{
my ($requirement, $args) = split /\s+/, $req->{requirement}, 2;
$args = '' unless defined $args;
$r->log_error("requirement := $requirement, $args") if $debug >= 2;
next if $requirement eq 'valid-user';
if($requirement eq 'user')
{
next if $args =~ m/\b$user\b/;
$forbidden = 1;
next;
}
# Call a custom method
my $ret_val = $auth_type->$requirement($r, $args);
$r->log_error("$auth_type->$requirement returned $ret_val") if $debug
>= 3;
next if $ret_val == OK;
# Nothing succeeded, deny access to this user.
$forbidden = 1;
last;
}
return $forbidden ? FORBIDDEN : OK;
}
sub login ($$)
{
my ($self, $r) = @_;
my $debug = $r->dir_config("AuthCookieDebug") || 0;
my ($auth_type, $auth_name) = ($r->auth_type, $r->auth_name);
my %args = $r->method eq 'POST' ? $r->content : $r->args;
my $log = logrequest $r, __PACKAGE__ . '::login', \%args;
unless (exists $args{'destination'})
{
$r->log_error("No key 'destination' found in posted data");
return SERVER_ERROR;
}
# Get the credentials from the data posted by the client.
# sch. xform avoids problems with users skipping numbers
# in their sequences (e.g., qw(credential_1, credential_3)).
my @credkeyz =
map { $_->[0] }
sort{ $a->[1] <=> $b->[1] }
map{ /credential_(\d+)/ ? [ $_, $1 ] : () }
keys %args;
my @credentials = @args{@credkeyz};
$r->log_error( "Credential keys:\n", Dumper \@credkeyz ) if $debug >2;
$r->log_error( "Credential vals:\n", Dumper \@credentials ) if $debug >2;
# Exchange the credentials for a session key.
my $ses_key = $self->authen_cred($r, @credentials);
$r->log_error("ses_key " . $ses_key) if ($debug >= 2);
$self->send_cookie($ses_key);
if ($r->method eq 'POST')
{
$r->method('GET');
$r->method_number(M_GET);
$r->headers_in->unset('Content-Length');
}
unless ($r->dir_config("${auth_name}Cache"))
{
$r->no_cache(1);
$r->err_header_out("Pragma" => "no-cache");
}
$r->header_out("Location" => $args{'destination'});
return REDIRECT;
}
########################################################################
# junk included to show what the logging does
########################################################################
sub logrequest
{
my ( $request, $package, $argz ) = @_;
my $log = $request->log;
# useful for detecting whether the proper module handled
# the request in the first place.
$log->debug( "Handled by $package" );
# store file access as info, full http request as debug for now.
# stop debug level output via setting log level in httpd.conf.
$log->debug( "request:\n\n" . $request->as_string . "\n" );
$log->debug( "args:\n", Dumper $argz ) if ref $argz;
if( my %cookyz = CGI::Cookie->parse( $request->headers_in->{'Cookie'} ) )
{
$log->debug( "old cookie:", map { "$_ => " . $cookyz{$_}->as_string }
sort keys %cookyz );
}
# hand back the log item -- saves a few lines of code in each module.
$log
}
# keep the use pragma happy
1
__DATA__
########################################################################
# ./logs/error_log
########################################################################
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive
Host: cdr_dev.lit.alltel.com:8081
Pragma: no-cache
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:22 2001] [error] auth_type Cdr::AuthCookie
[Thu Dec 6 15:16:22 2001] [error] auth_name CDR
[Thu Dec 6 15:16:22 2001] [error] ses_key_cookie
[Thu Dec 6 15:16:22 2001] [error] uri /foo
[Thu Dec 6 15:16:22 2001] [error] no cookie
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::login_form
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive
Host: cdr_dev.lit.alltel.com:8081
Pragma: no-cache
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
class => 'Cdr::AuthCookie',
uri => '/foo'
}
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(142): [client 10.53.28.218]
Reply:
<html>
<head>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<base href="" >
</head>
<body>
<form method="get" action="/cdrlogin" >
<!-- Login form for an Cdr::AuthCookie -->
<input type=hidden name="destination" value="/foo" >
<table>
<tr>
<th align=center colspan=2 >Please Enter Your Username and Password to
log in:"
<tr>
<th align=right >Username:
<td align=left > <input type="text" name="credential_0" size=12
maxlenth=12 >
<tr>
<th align=right >Password:
<td align=left > <input type="password" name="credential_1" size=12
maxlenth=12 >
<tr>
<td><!-- filler -->
<td align=left ><input type="submit" value=" Log In " >
</table>
</form>
</body></html>
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authorize
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive
Host: cdr_dev.lit.alltel.com:8081
Pragma: no-cache
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 200 OK
Pragma: no-cache
Cache-control: no-cache
Keep-Alive: timeout=15, max=1024
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Expires: Thu, 06 Dec 2001 21:16:22 GMT
[Thu Dec 6 15:16:22 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
user => undef
}
[Thu Dec 6 15:16:22 2001] [error] access to /foo failed for 10.53.28.218, reason: No
user authenticated.
[Thu Dec 6 15:16:33 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::login
[Thu Dec 6 15:16:33 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /cdrlogin?destination=%2Ffoo&credential_0=asdf&credential_1=asdf HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:33 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
credential_0 => 'asdf',
credential_1 => 'asdf',
destination => '/foo'
}
[Thu Dec 6 15:16:33 2001] [error] Credential keys:
[
'credential_0',
'credential_1'
]
[Thu Dec 6 15:16:33 2001] [error] Credential vals:
[
'asdf',
'asdf'
]
[Thu Dec 6 15:16:33 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authen-cred
[Thu Dec 6 15:16:33 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /cdrlogin?destination=%2Ffoo&credential_0=asdf&credential_1=asdf HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:33 2001] [error] ses_key
asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authenticate
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:16:35 2001] [error] auth_type Cdr::AuthCookie
[Thu Dec 6 15:16:35 2001] [error] auth_name CDR
[Thu Dec 6 15:16:35 2001] [error] ses_key_cookie
asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
[Thu Dec 6 15:16:35 2001] [error] uri /foo
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authen_ses_key
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:16:35 2001] [debug] Cdr/AuthCookie.pm(302): [client 10.53.28.218]
Processing cookie: asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
[Thu Dec 6 15:16:35 2001] [debug] Cdr/AuthCookie.pm(303): [client 10.53.28.218]
Processed values: asdf, 10.53.28.218, 1007673423
[Thu Dec 6 15:16:35 2001] [debug] Cdr/AuthCookie.pm(329): [client 10.53.28.218]
17472: Cookie has expired: 1007673423
[Thu Dec 6 15:16:35 2001] [error] user authenticated as asdf
[Thu Dec 6 15:16:35 2001] [error] user set to asdf
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authorize
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
user => 'asdf'
}
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:16:35 2001] [error] requirement := valid-user,
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::Hello
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:16:35 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(142): [client 10.53.28.218]
Reply:
<html>
<head>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<base href="" >
</head>
<body>Hello, world! from /foo</body></html>
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authenticate
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:18:16 2001] [error] auth_type Cdr::AuthCookie
[Thu Dec 6 15:18:16 2001] [error] auth_name CDR
[Thu Dec 6 15:18:16 2001] [error] ses_key_cookie
asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
[Thu Dec 6 15:18:16 2001] [error] uri /foo
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authen_ses_key
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:18:16 2001] [debug] Cdr/AuthCookie.pm(302): [client 10.53.28.218]
Processing cookie: asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
[Thu Dec 6 15:18:16 2001] [debug] Cdr/AuthCookie.pm(303): [client 10.53.28.218]
Processed values: asdf, 10.53.28.218, 1007673423
[Thu Dec 6 15:18:16 2001] [error] set_cookie Cdr::AuthCookie_CDR=; expires=Mon,
21-May-1971 00:00:00 GMT; path=/foo
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::login_form
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
Set-Cookie: Cdr::AuthCookie_CDR=; expires=Mon, 21-May-1971 00:00:00 GMT; path=/foo
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
class => 'Cdr::AuthCookie',
uri => '/foo'
}
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(142): [client 10.53.28.218]
Reply:
<html>
<head>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<base href="" >
</head>
<body>
<form method="get" action="/cdrlogin" >
<!-- Login form for an Cdr::AuthCookie -->
<input type=hidden name="destination" value="/foo" >
<table>
<tr>
<th align=center colspan=2 >Please Enter Your Username and Password to
log in:"
<tr>
<th align=right >Username:
<td align=left > <input type="text" name="credential_0" size=12
maxlenth=12 >
<tr>
<th align=right >Password:
<td align=left > <input type="password" name="credential_1" size=12
maxlenth=12 >
<tr>
<td><!-- filler -->
<td align=left ><input type="submit" value=" Log In " >
</table>
</form>
</body></html>
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(92): [client 10.53.28.218]
Handled by Cdr::AuthCookie::authorize
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(97): [client 10.53.28.218]
request:
GET /foo HTTP/1.1
Accept: text/html, image/png, image/jpeg, image/gif, image/x-xbitmap, */*
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Cache-Control: no-cache
Connection: Keep-Alive, TE
Cookie:
Cdr::AuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2
Cookie2: $Version="1"
Host: cdr_dev.lit.alltel.com:8081
Referer: http://cdr_dev.lit.alltel.com:8081/foo
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 200 OK
Set-Cookie: Cdr::AuthCookie_CDR=; expires=Mon, 21-May-1971 00:00:00 GMT; path=/foo
Pragma: no-cache
Cache-control: no-cache
Keep-Alive: timeout=15, max=1024
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html
Expires: Thu, 06 Dec 2001 21:18:16 GMT
Set-Cookie: Cdr::AuthCookie_CDR=; expires=Mon, 21-May-1971 00:00:00 GMT; path=/foo
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(99): [client 10.53.28.218]
args:
{
user => undef
}
[Thu Dec 6 15:18:16 2001] [debug]
/home/lembark/sandbox/cdr//code/app/website/Cdr/Shared.pm(101): [client 10.53.28.218]
old cookie:Cdr::AuthCookie_CDR =>
Cdr%3A%3AAuthCookie_CDR=asdf-10.53.28.218-1007673423-a8613661ccbf2cda1ee31aed97f3eba2;
path=/
[Thu Dec 6 15:18:16 2001] [error] access to /foo failed for 10.53.28.218, reason: No
user authenticated.
########################################################################
# net result on the screen -- problem is the pair of messages that
# get sent.
########################################################################
<html>
<head>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<base href="" >
</head>
<body>
<form method="get" action="/cdrlogin" >
<!-- Login form for an Cdr::AuthCookie -->
<input type=hidden name="destination" value="/foo" >
<table>
<tr>
<th align=center colspan=2 >Please Enter Your Username and Password to
log in:"
<tr>
<th align=right >Username:
<td align=left > <input type="text" name="credential_0" size=12
maxlenth=12 >
<tr>
<th align=right >Password:
<td align=left > <input type="password" name="credential_1" size=12
maxlenth=12 >
<tr>
<td><!-- filler -->
<td align=left ><input type="submit" value=" Log In " >
</table>
</form>
</body></html>HTTP/1.1 200 OK
Date: Thu, 06 Dec 2001 21:18:16 GMT
Server: Apache/1.3.20 (Unix) mod_perl/1.26
Set-Cookie: Cdr::AuthCookie_CDR=; expires=Mon, 21-May-1971 00:00:00 GMT; path=/foo
Keep-Alive: timeout=15, max=1023
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1
Expires: Thu, 06 Dec 2001 21:18:16 GMT
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>200 OK</TITLE>
</HEAD><BODY>
<H1>OK</H1>
You don't have permission to access /foo
on this server.<P>
<HR>
<ADDRESS>Apache/1.3.20 Server at AlltelViewer Port 8081</ADDRESS>
</BODY></HTML>