Do not try to listen on (corrupt) IPv4 versions of IPv6 native addresses.
authorMichael Poole <mdpoole@troilus.org>
Sun, 18 Mar 2007 02:33:02 +0000 (02:33 +0000)
committerMichael Poole <mdpoole@troilus.org>
Sun, 18 Mar 2007 02:33:02 +0000 (02:33 +0000)
git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/branches/u2_10_12_branch@1783 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
ircd/listener.c

index b931b81f363c258da7b6731652b1de671ac7e141..1d4f807f8ed3787bebebe492933ca42e8b06377a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2007-03-17  Michael Poole <mdpoole@troilus.org>
+
+       * ircd/listener.c (add_listener): Only try to create IPv6 sockets
+       for IPv6-compatible addresses; likewise for IPv4.
+
 2007-03-17  Michael Poole <mdpoole@troilus.org>
 
        * doc/example.conf (Operator): Update documentation to mention
index 9fc285d057f3536102943953d5b9f9cb7da2ea3f..ee6bcc2bd6a6bd55fdfa6a6fb8d30dcb09e673ae 100644 (file)
@@ -315,7 +315,8 @@ void add_listener(int port, const char* vhost_ip, const char* mask,
     listener->mask_bits = 0;
 
 #ifdef IPV6
-  if (FlagHas(&listener->flags, LISTEN_IPV6)) {
+  if (FlagHas(&listener->flags, LISTEN_IPV6)
+      && (irc_in_addr_unspec(&vaddr) || !irc_in_addr_is_ipv4(&vaddr))) {
     if (listener->fd_v6 >= 0) {
       set_listener_options(listener, listener->fd_v6);
       okay = 1;
@@ -330,7 +331,8 @@ void add_listener(int port, const char* vhost_ip, const char* mask,
   }
 #endif
 
-  if (FlagHas(&listener->flags, LISTEN_IPV4)) {
+  if (FlagHas(&listener->flags, LISTEN_IPV4)
+      && (irc_in_addr_unspec(&vaddr) || irc_in_addr_is_ipv4(&vaddr))) {
     if (listener->fd_v4 >= 0) {
       set_listener_options(listener, listener->fd_v4);
       okay = 1;