Oddity with redirects

2001-12-09 Thread Steven Lembark

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.





Re: Oddity with redirects

2001-12-09 Thread Perrin Harkins

 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...

Without knowing anything much about the AuthCookie module, I would guess
your problem has to do with confusing method handlers and regular
handlers.  if you prototype your handler with ($$) it expects to be
called as a method handler and receive a class name in addition to the
request object.  See the documentation on method handlers in the
mod_perl POD for more, or check the Eagle book.
- Perrin