You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Marc Boorshtein <mb...@gmail.com> on 2007/01/07 03:55:38 UTC

mod_perl Input Filter, cookies & mod proxy

Hello,

I'm trying to write a mod_perl based input filter that will change the
cookies in a request and then pass the request to mod_proxy.  I think
i'm pretty close to figuring this out, but its not working.  At this
point I can confirm my filter is running and modproxy is running, but
the cookies aren't changing.  Here's my filter code:

TestFilter.pm
------------------------------------------------------------------------------
package MyApache2::TestFilter;

use Apache2::Filter;
use Apache2::ServerUtil;
use  APR::Table;
use  Apache2::RequestRec;
use base qw(Apache2::Filter);
use Apache2::Const -compile => qw(OK :log);
use APR::Const    -compile => qw(:error SUCCESS);

sub input  : FilterRequestHandler {
    my($filter, $bb, $mode, $block, $readbytes) = @_;
    #...
    my $s = Apache2::ServerUtil->server;

  $s->log_error("server: log_error");
  $ENV{HTTP_COOKIE} = "somecookie=somevalue;";

  my $r = $filter->r;
  $s->log_error("r object : $r");

  my $headers = $r->headers_in;

 $s->log_error("headers : $headers");

  my $cookies = $headers->{Cookie};

  $s->log_error("cookies object : $cookies");


  $headers->{Cookie} = "mycookie=pleasework;";

 $headers = $r->headers_in;

 $s->log_error("headers2 : $headers");

  $cookies = $headers->{Cookie};
 $s->log_error("cookies object2 : $cookies");
  my $rv = $filter->next->get_brigade($bb, $mode, $block, $readbytes);
  return $rv unless $rv == APR::Const::SUCCESS;

  return Apache2::Const::OK;
}

sub output : FilterRequestHandler {
    my($filter, $bb) = @_;
    #...
}

1;
------------------------------------------------------------------------------------------------------------------

Here's the log output:
------------------------------------------------------------------------------------------------------------------
[Sat Jan 06 21:45:18 2007] [notice] Apache/2.2.2 (Fedora) configured
-- resuming normal operations
[Sat Jan 06 21:45:25 2007] [error] server: log_error
[Sat Jan 06 21:45:25 2007] [error] r object :
Apache2::RequestRec=SCALAR(0x92f0d40)
[Sat Jan 06 21:45:25 2007] [error] headers : APR::Table=HASH(0x93769a0)
[Sat Jan 06 21:45:25 2007] [error] cookies object :
ObPERM=%23userservcenterEmployeesuserservcenterCustomList%3D2%3A8%23;
mycookie=myvalue; JSESSIONID=692416A2F98FD34638A79B2277E72E44;
[Sat Jan 06 21:45:25 2007] [error] headers2 : APR::Table=HASH(0x930df98)
[Sat Jan 06 21:45:25 2007] [error] cookies object2 : mycookie=pleasework;
------------------------------------------------------------------------------------------------------------------


Here is my configuration:
------------------------------------------------------------------------------------------------------------------
PerlModule MyApache2::TestFilter
<Location /rocks>
      SetHandler perl-script
      PerlInputFilterHandler  -MyApache2::TestFilter::input
      ProxyPass http://localhost:8080/
</Location>
------------------------------------------------------------------------------------------------------------------

When I reach the proxied resource, all of the cookies are being send,
not just the "mycookie" cookie.

Am what I am trying possible?

Thanks
Marc