From 8b327f42811280415f924aa21f66dd72337b9bbc Mon Sep 17 00:00:00 2001 From: Steffen Ullrich Date: Sun, 24 May 2015 17:24:29 +0200 Subject: let FTP, NNTP, POP3, SMTP restrict Domain to IPv4 even if IPv6 is supported by using Domain/Family argument - accept Family and Domain - work around issues with IO::Socket::IP, which deals with argument 'Domain' in a non sub-classable way - update various documentation about the relevant super class and SSL support unify behavior: - accept LocalPort with NNTP too (not only LocalAddr) - accept LocalAddr and LocalPort with POP3, keep ResvPort for backward compatible name for LocalPort --- lib/Net/NNTP.pm | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'lib/Net/NNTP.pm') diff --git a/lib/Net/NNTP.pm b/lib/Net/NNTP.pm index 120292c..2387700 100644 --- a/lib/Net/NNTP.pm +++ b/lib/Net/NNTP.pm @@ -35,16 +35,19 @@ my $nossl_warn = !$ssl_class && 'To use SSL please install IO::Socket::SSL with version>=2.007'; # Code for detecting if we can use IPv6 +my $family_key = 'Domain'; my $inet6_class = eval { require IO::Socket::IP; no warnings 'numeric'; - IO::Socket::IP->VERSION(0.20); + IO::Socket::IP->VERSION(0.20) || die; + $family_key = 'Family'; } && 'IO::Socket::IP' || eval { require IO::Socket::INET6; no warnings 'numeric'; IO::Socket::INET6->VERSION(2.62); } && 'IO::Socket::INET6'; + sub can_ssl { $ssl_class }; sub can_inet6 { $inet6_class }; @@ -81,9 +84,10 @@ sub new { $connect{$_} = $arg{$_} for(grep { m{^SSL_} } keys %arg); } - foreach my $o (qw(LocalAddr Timeout)) { + foreach my $o (qw(LocalAddr LocalPort Timeout)) { $connect{$o} = $arg{$o} if exists $arg{$o}; } + $connect{$family_key} = $arg{Domain} || $arg{Family}; $connect{Timeout} = 120 unless defined $connect{Timeout}; $connect{PeerPort} = $arg{Port} || 'nntp(119)'; foreach my $h (@{$hosts}) { @@ -799,8 +803,11 @@ Net::NNTP - NNTP Client class C is a class implementing a simple NNTP client in Perl as described in RFC977 and RFC4642. +With L installed it also provides support for implicit and +explicit TLS encryption, i.e. NNTPS or NNTP+STARTTLS. The Net::NNTP class is a subclass of Net::Cmd and IO::Socket::INET. +IO::Socket::IP, IO::Socket::INET6 or IO::Socket::INET. =head1 CONSTRUCTOR @@ -843,10 +850,12 @@ so that the remote server becomes innd. If the C option is given with a value of zero, then this command will not be sent and the connection will be left talking to nnrpd. -B - If multiple IP addresses are present on the client host -with a valid route to the destination, you can specify the address your -C connects from and this way override the operating system's -pick. +B and B - These parameters are passed directly +to IO::Socket to allow binding the socket to a a specific local addr and port. + +B - This parameter is passed directly to IO::Socket and makes it +possible to enforce IPv4 connections even if L is used as super +class. Alternatively B can be used. =back -- cgit v1.2.3-24-ge0c7