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>

Reply via email to