Package: dkimproxy Version: 1.4.1-3 Severity: normal Tags: ipv6 patch Attached is a patch that allows dkimproxy to listen on IPv6, provided that the installed version of libnet-server-perl supports IPv6, which version 0.99-3 in Debian does. This patch depends on the package libio-socket-inet6-perl.
I haven't tested whether it still works with a non-IPv6-patched libnet-server-perl, but I think it should. Without this patch, if you have libnet-server-perl 0.99-3 installed, dkimproxy will open a socket for listening on IPv6, but upon connection, you will get "Connection closed by foreign host." -- System Information: Debian Release: 6.0.3 APT prefers stable APT policy: (990, 'stable'), (500, 'stable-updates') Architecture: amd64 (x86_64) Kernel: Linux 3.0.4-x86_64-linode21 (SMP w/4 CPU cores) Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages dkimproxy depends on: ii adduser 3.112+nmu2 add and remove users and groups ii liberror-perl 0.17-1 Perl module for error/exception ha ii libmail-dkim-perl 0.38-1 cryptographically identify the sen ii libnet-server-perl 0.99-3~bpo60+1 extensible, general perl server en ii libtext-wrapper-perl 1.02-1 Simple word wrapping routine ii lsb-base 3.2-23.2squeeze1 Linux Standard Base 3.2 init scrip ii openssl 0.9.8o-4squeeze5 Secure Socket Layer (SSL) binary a ii perl 5.10.1-17squeeze2 Larry Wall's Practical Extraction ii ssl-cert 1.0.28 simple debconf wrapper for OpenSSL Versions of packages dkimproxy recommends: pn amavisd-new <none> (no description available) dkimproxy suggests no packages. -- Configuration Files: /etc/default/dkimproxy changed: RUN_DKIMPROXY_IN=0 /etc/dkimproxy/dkimproxy_in.conf changed: listen localhost:10026 relay localhost:10024 /etc/dkimproxy/dkimproxy_out.conf changed: listen localhost:10028 relay localhost:10029 domain kenyonralph.com signature dkim keyfile /var/lib/dkimproxy/private.key selector postfix -- no debconf information
--- dkimproxy-1.4.1.orig/lib/MSDW/SMTP/Server.pm +++ dkimproxy-1.4.1/lib/MSDW/SMTP/Server.pm @@ -11,7 +11,7 @@ # Written by Bennett Todd <b...@rahul.net> package MSDW::SMTP::Server; -use IO::Socket; +use IO::Socket::INET6; use IO::File; =head1 NAME @@ -88,14 +88,14 @@ =item new(interface => $interface, port => $port); The interface and port to listen on must be specified. The interface -must be a valid numeric IP address (0.0.0.0 to listen on all -interfaces, as usual); the port must be numeric. If this call -succeeds, it returns a server structure with an open -IO::Socket::INET in it, ready to listen on. If it fails it dies, so -if you want anything other than an exit with an explanatory error -message, wrap the constructor call in an eval block and pull the -error out of $@ as usual. This is also the case for all other -methods; they succeed or they die. +must be a valid numeric IPv4 or IPv6 address (0.0.0.0 or :: to listen +on all interfaces, as usual); the port must be numeric. If this call +succeeds, it returns a server structure with an open IO::Socket::INET6 +in it, ready to listen on. If it fails it dies, so if you want +anything other than an exit with an explanatory error message, wrap +the constructor call in an eval block and pull the error out of $@ as +usual. This is also the case for all other methods; they succeed or +they die. =item accept([debug => FD]); @@ -154,7 +154,7 @@ my ($this, @opts) = @_; my $class = ref($this) || $this; my $self = bless { @opts }, $class; - $self->{sock} = IO::Socket::INET->new( + $self->{sock} = IO::Socket::INET6->new( LocalAddr => $self->{interface}, LocalPort => $self->{port}, Proto => 'tcp', only in patch2: unchanged: --- dkimproxy-1.4.1.orig/scripts/dkimproxy.out +++ dkimproxy-1.4.1/scripts/dkimproxy.out @@ -314,17 +314,11 @@ { my $self = shift; - # try to determine peer's address - use Socket; - my $peersockaddr = getpeername(STDOUT); - my ($port, $iaddr) = sockaddr_in($peersockaddr); - $ENV{REMOTE_ADDR} = inet_ntoa($iaddr); - # initialize syslog eval { openlog("dkimproxy.out", "perror,pid,ndelay", "mail"); - syslog("debug", '%s', "connect from $ENV{REMOTE_ADDR}"); + syslog("debug", '%s', "connect from $self->{server}->{peeraddr}"); }; if (my $E = $@) {