FreeBSD 6.1 - ipfw et ipv6

bin/91245 : [patch] ipfw(8) sometimes treat ipv6 input as ipv4 * CORRIGE *

Patch pour ipfw qui ne traite pas correctement les adresses IPv6 avec un fichier de règles

Ce bug a été corrigé pour la branche CURRENT (7.x) mais à ce jour pas en 6.x. Corrigé

Le patch ci dessous convient à mon système et correspond à la version :

$FreeBSD : src/sbin/ipfw/ipfw2.c,v 1.76.2.8 2006/06/29 21:03:12 julian Exp $

Le patch n’est donné qu’à titre d’exemple par facilité de présentation : il vous appartient de rechercher les modifications nécessaires pour votre système. (mais si vous recompilez le système vous devez le faire en toute connaissance de cause).


--- ipfw2.c.orig        Wed Jul 12 22:23:07 2006
+++ ipfw2.c     Wed Jul 12 22:26:04 2006
@@ -3707,7 +3707,8 @@
       struct in6_addr a;

       if (proto == IPPROTO_IPV6  || strcmp(av, "me6") == 0 ||
-           inet_pton(AF_INET6, av, &a))
+           inet_pton(AF_INET6, av, &a) ||
+            strchr(av, ':') != strrchr(av, ':'))
               return add_srcip6(cmd, av);
       /* XXX: should check for IPv4, not !IPv6 */
       if (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
@@ -3725,7 +3726,8 @@
       struct in6_addr a;

       if (proto == IPPROTO_IPV6  || strcmp(av, "me6") == 0 ||
-           inet_pton(AF_INET6, av, &a))
+           inet_pton(AF_INET6, av, &a)||
+            strchr(av, ':') != strrchr(av, ':'))
               return add_dstip6(cmd, av);
       /* XXX: should check for IPv4, not !IPv6 */
       if (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||

This software is provided ``AS IS’’ without any warranties of any kind.

Cette modification est donnée sans garantie d’aucune sorte.