Security Advisories (1)
CVE-2010-3438 (2019-11-12)

libpoe-component-irc-perl before v6.32 does not remove carriage returns and line feeds. This can be used to execute arbitrary IRC commands by passing an argument such as \"some text\\rQUIT\" to the 'privmsg' handler, which would cause the client to disconnect from the server.

NAME

POE::Component::IRC::Plugin::Proxy - A lightweight IRC proxy/bouncer for POE::Component::IRC.

SYNOPSIS

  use strict;
  use warnings;
  use POE qw(Component::IRC Component::IRC::Plugin::Proxy Component::IRC::Connector);

  my ($irc) = POE::Component::IRC->spawn();

  POE::Session->create( 
        package_states => [ 
                'main' => [ qw(_start) ],
        ],
	heap => { irc => $irc },
  );

  $poe_kernel->run();
  exit 0;

  sub _start {
    my ($kernel,$heap) = @_[KERNEL,HEAP];
    $heap->{irc}->yield( register => 'all' );
    $heap->{proxy} = POE::Component::IRC::Plugin::Proxy->new( bindport => 6969, password => "m00m00" );
    $heap->{irc}->plugin_add( 'Connector' => POE::Component::IRC::Connector->new() );
    $heap->{irc}->plugin_add( 'Proxy' => $heap->{proxy} );
    $heap->{irc}->yield ( connect => { Nick => 'testbot', Server => 'someserver.com' } );
    undef;
  }

DESCRIPTION

POE::Component::IRC::Plugin::Proxy is a POE::Component::IRC plugin that provides lightweight IRC proxy/bouncer server to your POE::Component::IRC bots. It enables multiple IRC clients to be hidden behind a single IRC client-server connection.

Spawn a POE::Component::IRC session and add in a POE::Component::IRC::Plugin::Proxy plugin object, specifying a bindport and a password the connecting IRC clients have to use. When the component is connected to an IRC network a listening port is opened by the plugin for multiple IRC clients to connect.

Neat, huh? >;o)

CONSTRUCTOR

new

Takes a number of arguments:

'password', the password to require from connecting clients;
'bindaddr', a local address to bind the listener to, default is 'localhost';
'bindport', what port to bind to, default is 0, ie. randomly allocated by OS;

Returns an object suitable for passing to POE::Component::IRC's plugin_add() method.

METHODS

current_channels

Takes no arguments, returns a list of the channels that the component is currently a member of.

getsockname

Takes no arguments. Accesses the listeners getsockname() method. See POE::Wheel::SocketFactory for details of the return value;

list_wheels

Takes no arguments. Returns a list of wheel ids of the current connected clients.

wheel_info

Takes one parameter, a wheel ID to query. Returns undef if an invalid wheel id is passed. In a scalar context returns the time that the client connected in unix time. In a list context returns a list consisting of the peer address, port, tthe connect time and the lag in seconds for that connection.

EVENTS

The plugin emits the following POE::Component::IRC events:

irc_proxy_up

Emitted when the listener is successfully started. ARG0 is the result of the listener getsockname().

irc_proxy_connect

Emitted when a client connects to the listener. ARG0 is the wheel ID of the client.

irc_proxy_rw_fail

Emitted when the Wheel::ReadWrite fails on a connection. ARG0 is the wheel ID of the client.

irc_proxy_authed

Emitted when a connecting client successfully negotiates an IRC session with the plugin. ARG0 is the wheel ID of the client.

irc_proxy_close

Emitted when a connected client disconnects. ARG0 is the wheel ID of the client.

irc_proxy_down

Emitted when the listener is successfully shutdown. ARG0 is the result of the listener getsockname().

QUIRKS

Connecting IRC clients will not be able to change nickname. This is a feature.

AUTHOR

Chris 'BinGOs' Williams

SEE ALSO

POE::Component::IRC