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::FollowTail - A PoCo-IRC plugin to follow the tail of an ever-growing file

SYNOPSIS

  use POE qw(Component::IRC Component::IRC::Plugin::FollowTail);

  my $nickname = 'Flibble' . $$;
  my $ircname = 'Flibble the Sailor Bot';
  my $ircserver = 'irc.blahblahblah.irc';
  my $filename = '/some/such/file/here';

  my @channels = ( '#Blah', '#Foo', '#Bar' );

  my $irc = POE::Component::IRC->spawn( 
        nick => $nickname,
        server => $ircserver,
        port => $port,
        ircname => $ircname,
  ) or die "Oh noooo! $!";

  POE::Session->create(
        package_states => [
                'main' => [ qw(_start irc_001 irc_tail_input irc_tail_error irc_tail_reset) ],
        ],
  );

  $poe_kernel->run();
  exit 0;

  sub _start {
    $irc->plugin_add( 'FollowTail' => 
	POE::Component::IRC::Plugin::FollowTail->new( 
		filename => $filename,
	) );
    $irc->yield( register => 'all' );
    $irc->yield( connect => { } );
    undef;
  }

  sub irc_001 {
    $irc->yield( join => $_ ) for @channels;
    undef;
  }

  sub irc_tail_input {
    my ($kernel,$sender,$filename,$input) = @_[KERNEL,SENDER,ARG0,ARG1];
    $kernel->post( $sender, 'privmsg', $_, "$filename: $input" ) for @channels;
    return;
  }

  sub irc_tail_error {
    my ($kernel,$sender,$filename,$errnum,$errstring) = @_[KERNEL,SENDER,ARG0..ARG2];
    $kernel->post( $sender, 'privmsg', $_, "$filename: ERROR: $errnum $errstring" ) for @channels;
    $irc->plugin_del( 'FollowTail' );
    return;
  }

  sub irc_tail_reset {
    my ($kernel,$sender,$filename) = @_[KERNEL,SENDER,ARG0];
    $kernel->post( $sender, 'privmsg', $_, "$filename: RESET EVENT" ) for @channels;
    return;
  }

DESCRIPTION

POE::Component::IRC::Plugin::FollowTail is a POE::Component::IRC plugin that uses POE::Wheel::FollowTail to follows the end of an ever-growing file. It generates 'irc_tail_' prefixed events for each new record that is appended to its file.

CONSTRUCTOR

new

Takes two arguments:

'filename', the name of the file to tail, mandatory;
'filter', a POE::Filter object to pass to POE::Wheel::FollowTail, optional;

EVENTS

The plugin generates the following additional POE::Component::IRC events:

irc_tail_input

Emitted for every complete record read. ARG0 will be the filename, ARG1 the record which was read.

irc_tail_error

Emitted whenever an error occurs. ARG0 will be the filename, ARG1 and ARG2 hold numeric and string values for $!, respectively.

irc_tail_reset

Emitted every time a file is reset. ARG0 will be the filename.

AUTHOR

Chris 'BinGOs' Williams

SEE ALSO

POE::Component::IRC

POE::Wheel::FollowTail