Package: libnet-server-perl Version: 0.97-1.1 Severity: normal -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
the previous patch also needed an explicit import of the inet_ntop method, updated patch included. i've tested this version with a modified copy of the udp echo client and it seems to work. i'm still having trouble getting the particular client motivating this work (spampd) to work, but this could possibly be due to problems with the particular app. sean - -- System Information: Debian Release: squeeze/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Kernel: Linux 2.6.26-2-amd64 (SMP w/2 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.utf8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/bash Versions of packages libnet-server-perl depends on: ii libio-multiplex-perl 1.10-1 object-oriented interface to selec ii libnet-cidr-perl 0.13-1 Manipulate IPv4/IPv6 netblocks in ii perl 5.10.0-19 Larry Wall's Practical Extraction libnet-server-perl recommends no packages. Versions of packages libnet-server-perl suggests: ii libio-socket-ssl-perl 1.24-1 Perl module implementing object or - -- no debconf information -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.9 (GNU/Linux) iD8DBQFJ/trfynjLPm522B0RAkzHAJ0ebqtU8KlD5pRXNuDJD8tR35MH4ACbB9B7 gFDgCh+t5PM0kcySYc2+vZk= =b6bw -----END PGP SIGNATURE-----
#! /bin/sh /usr/share/dpatch/dpatch-run ## 03_ipv6-support.dpatch: ipv6 support in Net::Server ## ## DP: this patch was originally found at ## DP: http://dev.fiqz.com/svn/fiqz/patches/perl-Net-Server-0.86-ipv6.patch ## DP: ## DP: it was then updated by sean finney <sean...@debian.org> to apply against ## DP: the latest version of Net-Server in debian, and modified for new ## DP: stricter perl coding/syntax conventions. @DPATCH@ diff -urNad libnet-server-perl-0.97~/lib/Net/Server/Proto/TCP.pm libnet-server-perl-0.97/lib/Net/Server/Proto/TCP.pm --- libnet-server-perl-0.97~/lib/Net/Server/Proto/TCP.pm 2009-05-04 11:50:00.000000000 +0200 +++ libnet-server-perl-0.97/lib/Net/Server/Proto/TCP.pm 2009-05-04 11:50:42.000000000 +0200 @@ -24,9 +24,10 @@ use strict; use vars qw($VERSION $AUTOLOAD @ISA); use IO::Socket (); +use IO::Socket::INET6 (); $VERSION = $Net::Server::VERSION; # done until separated -...@isa = qw(IO::Socket::INET); +...@isa = qw(IO::Socket::INET6); sub object { my $type = shift; diff -urNad libnet-server-perl-0.97~/lib/Net/Server.pm libnet-server-perl-0.97/lib/Net/Server.pm --- libnet-server-perl-0.97~/lib/Net/Server.pm 2009-05-04 11:50:00.000000000 +0200 +++ libnet-server-perl-0.97/lib/Net/Server.pm 2009-05-04 11:51:56.000000000 +0200 @@ -25,7 +25,8 @@ use strict; use vars qw($VERSION); -use Socket qw(inet_aton inet_ntoa AF_INET AF_UNIX SOCK_DGRAM SOCK_STREAM); +use Socket qw(inet_aton inet_ntoa AF_INET AF_INET6 AF_UNIX SOCK_DGRAM SOCK_STREAM); +use Socket6 qw(inet_ntop); use IO::Socket (); use IO::Select (); use POSIX (); @@ -356,7 +357,7 @@ push @{ $prop->{host} }, (($prop->{host}->[-1]) x (@{ $prop->{port} } - @{ $prop->{host}})); # augment hosts with as many as port foreach my $host (@{ $prop->{host} }) { $host = '*' if ! defined $host || ! length $host;; - $host = ($host =~ /^([\w\.\-\*\/]+)$/) ? $1 : $self->fatal("Unsecure host \"$host\""); + $host = ($host =~ /^([\[\]\:\w\.\-\*\/]+)$/) ? $1 : $self->fatal("Unsecure host \"$host\""); } $prop->{proto} = [] if ! defined $prop->{proto}; @@ -744,8 +745,8 @@ my $sockname = getsockname( $sock ); if( $sockname ){ ($prop->{sockport}, $prop->{sockaddr}) - = Socket::unpack_sockaddr_in( $sockname ); - $prop->{sockaddr} = inet_ntoa( $prop->{sockaddr} ); + = ((length($sockname) > 16) ? Socket6::unpack_sockaddr_in6( $sockname ) : Socket::unpack_sockaddr_in( $sockname )); + $prop->{sockaddr} = ((length($sockname) > 16) ? inet_ntop( AF_INET6, $prop->{sockaddr} ) : inet_ntoa( $prop->{sockaddr} )); }else{ ### does this only happen from command line? @@ -759,17 +760,17 @@ if( $prop->{udp_true} ){ $proto_type = 'UDP'; ($prop->{peerport} ,$prop->{peeraddr}) - = Socket::sockaddr_in( $prop->{udp_peer} ); + = ((length($sockname) > 16) ? Socket6::unpack_sockaddr_in6( $prop->{udp_peer} ) : Socket::sockaddr_in( $prop->{udp_peer} )); }elsif( $prop->{peername} = getpeername( $sock ) ){ ($prop->{peerport}, $prop->{peeraddr}) - = Socket::unpack_sockaddr_in( $prop->{peername} ); + = ((length($sockname) > 16) ? Socket6::unpack_sockaddr_in6( $prop->{peername} ) : Socket::unpack_sockaddr_in( $prop->{peername} )); } if( $prop->{peername} || $prop->{udp_true} ){ - $prop->{peeraddr} = inet_ntoa( $prop->{peeraddr} ); + $prop->{peeraddr} = ((length($sockname) > 16) ? inet_ntop( AF_INET6, $prop->{peeraddr} ) : inet_ntoa( $prop->{peeraddr} )); if( defined $prop->{reverse_lookups} ){ - $prop->{peerhost} = gethostbyaddr( inet_aton($prop->{peeraddr}), AF_INET ); + $prop->{peerhost} = ( (length($sockname) > 16) ? gethostbyaddr( inet_pton(AF_INET6, $prop->{peeraddr}), AF_INET6 ) : gethostbyaddr( inet_aton($prop->{peeraddr}), AF_INET ) ); } $prop->{peerhost} = '' unless defined $prop->{peerhost}; @@ -1123,7 +1124,7 @@ or $self->fatal("Can't dup socket [$!]"); ### hold on to the socket copy until exec - $prop->{_HUP}->[$i] = IO::Socket::INET->new; + $prop->{_HUP}->[$i] = IO::Socket::INET6->new(); $prop->{_HUP}->[$i]->fdopen($fd, 'w') or $self->fatal("Can't open to file descriptor [$!]");
signature.asc
Description: Digital signature