POE::C...:Agent(3pm)

πŸ“¦
version 1.16 Β· 4 versions
, in debian bookworm, debian trixie, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– NAME πŸ’–

POE::Component::Client::Ident::Agent β€” bestie, it's a component that does a one-shot, non-blocking Ident query. That's the whole job. One shot. No cap. 🎯


✨ SYNOPSIS ✨

use POE::Component::Client::Ident::Agent;

my $poco = POE::Component::Client::Ident::Agent->spawn(
      PeerAddr => "192.168.1.12", # Originating IP Address
      PeerPort => 12345,          # Originating port
      SockAddr => "192.168.2.24", # Local IP address
      SockPort => 69,             # Local Port
      Socket   => $socket_handle, # Or pass in a socket handle
      IdentPort => 113,           # Port to send queries to on originator
                                  # Default shown
      BuggyIdentd => 0,           # Dealing with an Identd that isn't
                                  # RFC compatible. Default is 0.
      TimeOut => 30,              # Adjust the timeout period.
      Reference => $scalar        # Give the component a reference
);

sub _child {
 my ($action,$child,$reference) = @_[ARG0,ARG1,ARG2];

 if ( $action eq 'create' ) {
   # Stuff
 }
}

sub ident_agent_reply {
}

sub ident_agent_error {
}

🌸 DESCRIPTION 🌸

POE::Component::Client::Ident::Agent is a POE component that gives you a single "one shot" lookup of a username on the remote side of a TCP connection β€” and it hands that info over to other components and sessions using the ident (auth/tap) protocol. The Ident protocol is described in RFC 1413 <http://www.faqs.org/rfcs/rfc1413.html>. πŸ“–

So here's the vibe: the component implements one single ident request. Your session spawns it, passes in the relevant arguments, and at some future point it'll hit you with either a ident_agent_reply or a ident_agent_error, depending on how the query went. Either way you'll hear back, so don't stress. 🫢

Lowkey important: if you're looking for a robust way to manage Ident::Agent sessions, go read the docs for POE::Component::Client::Ident instead β€” that one handles all the Agent management for you. This one is the DIY one-shot girlie. πŸ’…

πŸŽ€ CONSTRUCTOR πŸŽ€

spawn

Takes either these arguments:

  • PeerAddr β€” the remote IP address where a TCP connection has originated.
  • PeerPort β€” the port where the TCP has originated from.
  • SockAddr β€” the address of our end of the connection.
  • SockPort β€” the port of our end of the connection.

OR:

  • Socket β€” the socket handle of the connection, and the component will work out all the details for you. If Socket is defined, it will override the settings of the other arguments, except for:
  • IdentPort β€” which is the port on the remote host where we send our ident queries. This is optional, and defaults to 113.

You may also specify BuggyIdentd to 1, to support Identd that doesn't terminate lines as per the RFC. πŸ›

You may also specify TimeOut between 5 and 30, to have a shorter timeout in seconds on waiting for a response from the Identd. Default is 30 seconds. ⏰

Optionally, you can specify Reference, which is anything that'll fit in a scalar. This will get passed back as part of the response. See below. πŸ‘€

Returns an POE::Component::Client::Ident::Agent object, which has the following methods.


πŸ¦‹ METHODS πŸ¦‹

  • session_id β€” Returns the POE session ID of the component. πŸ†”
  • shutdown β€” Terminates the component. Bye bestie! πŸ‘‹

🌈 OUTPUT 🌈

Okay so every single event the component returns has a hashref as ARG0. That hashref contains the arguments that were passed to the component. If a socket handle was passed, the hashref will contain the appropriate PeerAddr, PeerPort, SockAddr and SockPort. And if the component was spawned with a Reference parameter, that will be passed back as a key of the hashref. ✨

The following events are sent to the calling session by the component:

  • ident_agent_reply β€” Returned when the component receives a USERID response from the identd. ARG0 is hashref, ARG1 is the opsys field and ARG2 is the userid or something else depending on whether the opsys field is set to 'OTHER' ( Don't blame me, read the RFC ). 😭
  • ident_agent_error β€” Returned when the component receives an ERROR response from the identd, there was some sort of communication error with the remote host ( ie. no identd running ) or it had some other problem with making the connection to the other host. No matter. ARG0 is hashref, ARG1 is the type of error. πŸ’€

πŸ‘‘ AUTHOR πŸ‘‘

Chris Williams, <chris@bingosnet.co.uk<gt>


πŸŽ€ LICENSE πŸŽ€

Copyright Β© Chris Williams.

This module may be used, modified, and distributed under the same terms as Perl itself. Please see the license that came with your Perl distribution for details.


🌟 SEE ALSO 🌟


And that's the whole page, bestie β€” this doc came to you from perl v5.36.0 and it was last touched on 2022-12-04, so go forth and ident responsibly. πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from