diff options
author | hubertf <hubertf> | 2000-12-21 23:02:37 +0000 |
---|---|---|
committer | hubertf <hubertf> | 2000-12-21 23:02:37 +0000 |
commit | 969ce9a0fdaa508c9aaa4de04bc8692658834eaf (patch) | |
tree | 0fb18eecd3bb0ae7e081c88267786e12b316dc04 /chat/sirc | |
parent | 6af4aa06b843fbd2866bd6a836ca39692bb94958 (diff) | |
download | pkgsrc-969ce9a0fdaa508c9aaa4de04bc8692658834eaf.tar.gz |
Add patch to work with IPv6. Also tested on (non-v6) NetBSD 1.4 and with
v4 servers on v6-enabled system.
Diffstat (limited to 'chat/sirc')
-rw-r--r-- | chat/sirc/Makefile | 3 | ||||
-rw-r--r-- | chat/sirc/patches/patch-aa | 110 |
2 files changed, 112 insertions, 1 deletions
diff --git a/chat/sirc/Makefile b/chat/sirc/Makefile index f17b0f1269a..aafc356dbe8 100644 --- a/chat/sirc/Makefile +++ b/chat/sirc/Makefile @@ -1,6 +1,7 @@ -# $NetBSD: Makefile,v 1.1.1.1 2000/12/15 00:36:30 wiz Exp $ +# $NetBSD: Makefile,v 1.2 2000/12/21 23:02:37 hubertf Exp $ DISTNAME= sirc-2.211 +PKGNAME= sirc-2.211nb1 CATEGORIES= chat MASTER_SITES= http://www.iagora.com/~espel/sirc/ \ http://www.iagora.com/~espel/sirc/scripts/ diff --git a/chat/sirc/patches/patch-aa b/chat/sirc/patches/patch-aa new file mode 100644 index 00000000000..2d2d2ae1fd5 --- /dev/null +++ b/chat/sirc/patches/patch-aa @@ -0,0 +1,110 @@ +$NetBSD: patch-aa,v 1.1 2000/12/21 23:02:38 hubertf Exp $ + +--- dsirc Wed Sep 27 09:34:49 2000 ++++ dsirc6 Thu Dec 21 23:19:02 2000 +@@ -52,6 +52,8 @@ + } + + if ($] >= 5 && (eval "use Socket;", $@ eq '')) { ++ print "used Socket\n"; ++ use Socket6; + } elsif (-f "$libdir/sircsock.ph") { + do "$libdir/sircsock.ph"; + } elsif (-f $ENV{'HOME'}."/sircsock.ph") { +@@ -95,6 +97,7 @@ + $restrict=$opt_R; + $set{"LOCALHOST"}=$opt_H || $ENV{"SIRCHOST"} || $ENV{"IRCHOST"} || + $ENV{"LOCALHOST"} || ""; ++$use_ipv6=0; # enabled when the given server gets resolved by gethostbyname2 + + if ($set{"LOCALHOST"}) { + $bindaddr=&resolve($set{"LOCALHOST"}); +@@ -148,7 +151,16 @@ + } elsif ($_[0] =~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/) { + return pack("c4", $1, $2, $3, $4); + } else { +- return (gethostbyname($_[0]))[4]; ++ local $rc; ++ ++ $rc = (gethostbyname2($_[0], AF_INET6))[4]; ++ ++ if ($rc) { ++ $use_ipv6 = 1; ++ return $rc; ++ } else { ++ return (gethostbyname($_[0]))[4]; ++ } + } + } + +@@ -162,19 +174,31 @@ + local($fh, $host, $port)=@_; + local($adr, $otherend)=&resolve($host); + &tell("*\cbE\cb* Hostname `$host' not found"), return 0 unless $adr; +- $otherend=pack("S n a4 x8", &AF_INET, $port, $adr); +- &print("*\cbE\cb* Out of file descriptors"), return 0 +- unless socket($fh, &PF_INET, &SOCK_STREAM, 0); +- if ($set{"LOCALHOST"}) { +- bind($fh, pack("S n a4 x8", &AF_INET, 0, $bindaddr)) || +- &tell("*\cbE\cb* Warning: can't bind to sirc host ".$set{'LOCALHOST'}); ++ if ($use_ipv6) { ++ $otherend=pack_sockaddr_in6($port, $adr); ++ &print("*\cbE\cb* Out of file descriptors"), return 0 ++ unless socket($fh, &PF_INET6, &SOCK_STREAM, 0); ++ } else { ++ $otherend=pack_sockaddr_in($port, $adr); ++ &print("*\cbE\cb* Out of file descriptors"), return 0 ++ unless socket($fh, &PF_INET, &SOCK_STREAM, 0); ++ } ++ if (! $use_ipv6) { ++ if ($set{"LOCALHOST"}) { ++ bind($fh, pack("S n a4 x8", &AF_INET, 0, $bindaddr)) || ++ &tell("*\cbE\cb* Warning: can't bind to sirc host ".$set{'LOCALHOST'}); ++ } + } + $trysock=$fh; + $SIG{'QUIT'}='sigquit'; + &print("*\cbE\cb* Can't connect to host: $!"), close $fh, + $SIG{'QUIT'}='IGNORE', return 0 unless connect($fh, $otherend); + $SIG{'QUIT'}='IGNORE'; +- $bindaddr=(unpack("S n a4", getsockname($fh)))[2] if !$bindaddr; ++ if ($use_ipv6) { ++ $bindaddr=(unpack_sockaddr_in6(getsockname($fh)))[2] if !$bindaddr; ++ } else { ++ $bindaddr=(unpack_sockaddr_in(getsockname($fh)))[2] if !$bindaddr; ++ } + select($fh); $|=1; select(STDOUT); + return 1; + } +@@ -183,15 +207,26 @@ + $_[0]=&newfh; + local($fh, $port)=@_; + local($thisend); +- $bindaddr=pack("x4", 0) unless $bindaddr; +- $thisend=pack("S n a4 x8", &AF_INET, $port+0, $bindaddr); +- &tell("*\cbE\cb* Out of file descriptors"), return 0 +- unless socket($fh, &PF_INET, &SOCK_STREAM, 0); ++ if ($use_ipv6) { ++ $bindaddr=pack_sockaddr_in6(0, 0) unless $bindaddr; ++ $thisend=pack_sockaddr_in6($port+0, $bindaddr); ++ &tell("*\cbE\cb* Out of file descriptors"), return 0 ++ unless socket($fh, &PF_INET6, &SOCK_STREAM, 0); ++ } else { ++ $bindaddr=pack_sockaddr_in(0, 0) unless $bindaddr; ++ $thisend=pack_sockaddr_in($port+0, $bindaddr); ++ &tell("*\cbE\cb* Out of file descriptors"), return 0 ++ unless socket($fh, &PF_INET, &SOCK_STREAM, 0); ++ } + &tell("*\cbE\cb* Can't bind local socket!"), close $fh, return 0 + unless bind($fh, $thisend); + &tell("*\cbE\cb* Can't listen to socket!"), close $fh, return + unless listen($fh, 5); +- return (unpack("S n", getsockname($fh)))[1]; ++ if ($use_ipv6) { ++ return (unpack_sockaddr_in6(getsockname($fh)))[1]; ++ } else { ++ return (unpack_sockaddr_in(getsockname($fh)))[1]; ++ } + } + + sub accept { |