perl-modperl mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alexander Farber <alexander.far...@gmail.com>
Subject Re: Path to my module and APR::Socket::send() usage
Date Thu, 21 Oct 2010 13:21:37 GMT
For 3) I unfortunately get:

 [error] Can't locate object method "log" via package
"Apache2::ServerRec" at /etc/httpd/SocketPolicy.pm line 39.\n

when I try:

sub handler {
        my $c = shift;
        my $sock = $c->client_socket;

        # set the socket to the blocking mode
        $sock->opt_set(APR::Const::SO_NONBLOCK => 0);

        $sock->send(POLICY);

        my $slog = $c->base_server()->log();
        $slog->info('served socket policy to: ', $c->remote_ip());

        Apache2::Const::OK;
}

Regards
Alex


On Thu, Oct 21, 2010 at 2:35 PM, Alexander Farber
<alexander.farber@gmail.com> wrote:
> 1) How do you specify the path to your custom module,
>    so that Apache 2 can load it at the startup?
>
>    I'm using mod_perl-2.0.4-6.el5 with CentOS Linux 5.5 and
>    have the following lines in /etc/httpd/conf.d/perl.conf:
>
>    LoadModule perl_module modules/mod_perl.so
>    .......
>    Listen 843
>    <VirtualHost _default_:843>
>        PerlModule                   SocketPolicy
>        PerlProcessConnectionHandler SocketPolicy
>    </VirtualHost>
>
>    but this works only if I put my SocketPolicy.pm
>    under /etc/httpd. Otherwise it isn't found in @INC.
>
> 2) The "perldoc APR:Socket" suggests an example:
>
>         # read from/write to the socket (w/o handling possible failures)
>         my $wanted = 1024;
>         while ($sock->recv(my $buffer, $wanted)) {
>             $sock->send($buffer);
>         }
>
>    and later it also says the mod_perl will handle errors for you.
>
>    Shouldn't return values from send() be checked in
>    a loop for the cases, that it wasn't able to write the
>    complete buffer in 1 pass? Or does send($buffer)
>    alsways write the complete $buffer to the blocking socket?
>
>    And what does it mean "mod_perl will handle errors for you"?
>    Does it catch exception coming from send()/recv()
>    and print it to error_log or is is something else?
>
> 3) And the 3rd question is optional (because I'll probably find
>    this in the docs soon), but maybe someone can tell me, how
>    to log the IP of the socket peer in my module to access_log?
>
> Thank you and below is my module
> Alex
>
> # cat /etc/httpd/SocketPolicy.pm
> package SocketPolicy;
>
> # Run: semanage port -a -t http_port_t -p tcp 843
> # And add following lines to the httpd.conf
> # Listen 843
> # <VirtualHost _default_:843>
> #       PerlModule                   SocketPolicy
> #       PerlProcessConnectionHandler SocketPolicy
> # </VirtualHost>
>
> use strict;
> use warnings FATAL => 'all';
>
> use Apache2::Connection();
> use APR::Socket();
>
> use Apache2::Const(-compile => 'OK');
> use APR::Const(-compile => 'SO_NONBLOCK');
>
> use constant POLICY =>
> qq{<?xml version="1.0"?>
> <!DOCTYPE cross-domain-policy SYSTEM
> "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
>
> <cross-domain-policy>
> <allow-access-from domain="*" to-ports="8080"/>
> </cross-domain-policy>
> \0};
>
> sub handler {
>        my $c = shift;
>        my $sock = $c->client_socket;
>
>        # set the socket to the blocking mode
>        $sock->opt_set(APR::Const::SO_NONBLOCK => 0);
>
>        $sock->send(POLICY);
>
>        Apache2::Const::OK;
> }
>
> 1;
>

Mime
View raw message