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 AuthType Cdr::AuthCookie AuthName CDR PerlAuthenHandler Cdr::AuthCookie->authenticate PerlAuthzHandler Cdr::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 => '<ADDRESS>Apache/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.