Getting Apache::AuthCookie working. The AuthCookie portion is proving
simpler than Apache...
Problem is that accessing the /loginform location works perfectly: I
get the form, get the cookie back and get sent to the proper place.
Accessing the protected site blows up because the Apache object
referent is undef (see below for examples). No doubt I've screwed
up some part of the httpd.conf but cannot figure out what at this
point...
Wandering through the Apache doc's hasn't helped, nor can I find
anything particularly descriptive in the Eagle book -- p. 123+
don't indicate that the $r is any different for a request and
p. 554+ are in C. None of them seem to indicate that a redirected
request produces an invalid request object in the perl API.
Any suggestions as to what I've done wrong or specific working
examples would be appreciated.
/sl
Aside: this is rather obviusly hack code at this point. I know
that, the only purpose is to get a working referent when accessing
the /foo site.
sub login_form($$)
{
my( $class, $request ) = @_;
print STDERR \n$$: login_form: $class, , Dumper $request;
print STDERR \n$$: login_form: $class\nrequest:\n, $request-as_string;
print STDERR Environment:\n, Dumper \%ENV;
# this eventually needs to be updated for the user's
# real dest uri.
( my $form = $loginform ) =~ s{DEST}{/foo};
print STDOUT $form;
}
# Authorization cookie handler.
PerlModule Cdr::AuthCookie;
PerlSetVar CDRPath /foo
PerlSetVar CDRLoginScript /cdrloginform
PerlSetVar CDRLoginHandler /cdrlogin
#PerlSetVar CDRExpires +8h
PerlSetVar AuthCookieDebug 3
# 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
AuthType Cdr::AuthCookie
AuthName CDR
SetHandler perl-script
PerlHandler Cdr::AuthCookie-login
/Location
Location /foo
SetHandler perl-script
AuthTypeCdr::AuthCookie
AuthNameCDR
PerlAuthenHandler Cdr::AuthCookie-authenticate
PerlAuthzHandlerCdr::AuthCookie-authorize
PerlHandler Cdr::Hello # just print the famous message
require valid-user
/Location
Result of accessing /cdrloginform:
32309: login_form: Cdr::AuthCookie,
bless( do{\(my $o = 144324132)}, 'Apache' )
32309: login_form: Cdr::AuthCookie
request:
GET /cdrloginform 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
Host: cdr_dev.lit.alltel.com:8081
TE: deflate, gzip, chunked, identity, trailers
User-Agent: Opera/5.0 (Linux 2.2.18.ae i686; U) [en]
HTTP/1.1 (null)
Environment [cruft removed]:
{
QUERY_STRING = '',
REMOTE_PORT = '3767',
HTTP_USER_AGENT = 'Opera/5.0 (Linux 2.2.18.ae i686; U) [en]',
HTTP_ACCEPT = 'text/html, image/png, image/jpeg, image/gif,
image/x-xbitmap, */*',
HTTP_HOST = 'cdr_dev.lit.alltel.com:8081',
GATEWAY_INTERFACE = 'CGI-Perl/1.1',
HTTP_TE = 'deflate, gzip, chunked, identity, trailers',
SCRIPT_NAME = '/cdrloginform',
SERVER_NAME = 'AlltelViewer',
HTTP_ACCEPT_ENCODING = 'deflate, gzip, x-gzip, identity, *;q=0',
MOD_PERL = 'mod_perl/1.26',
SCRIPT_FILENAME =
'/home/lembark/sandbox/cdr//code/app/website/htdocs/cdrloginform',
APACHE_PORT = '8081',
SERVER_PROTOCOL = 'HTTP/1.1',
HTTP_CONNECTION = 'Keep-Alive, TE',
SERVER_SIGNATURE = 'ADDRESSApache/1.3.20 Server at AlltelViewer Port
8081/ADDRESS
',
SERVER_SOFTWARE = 'Apache/1.3.20 (Unix) mod_perl/1.26',
:
HTTP_CACHE_CONTROL = 'no-cache'
}
Result of accessing /foo:
32309: login_form: Cdr::AuthCookie,
undef
[Thu Dec 6 11:11:20 2001] [error] Can't call method as_string on an
undefined value at Cdr/AuthCookie.pm line 360, DATA line 1.