[SSSD] [PATCH] Convert IN_MULTICAST parameter to host order

Lukas Slebodnik lslebodn at redhat.com
Fri Sep 13 07:48:33 UTC 2013


On (13/09/13 09:29), Lukas Slebodnik wrote:
>On (12/09/13 18:47), Jakub Hrozek wrote:
>>The attached patch fixes
>>https://bugzilla.redhat.com/show_bug.cgi?id=1007475#c2
>
>>From eaadcee0fc1335e7c37b2c04ae4fb39fe7a58b59 Mon Sep 17 00:00:00 2001
>>From: Jakub Hrozek <jhrozek at redhat.com>
>>Date: Thu, 12 Sep 2013 18:45:54 +0200
>>Subject: [PATCH] Convert IN_MULTICAST parameter to host order
>>
>>https://fedorahosted.org/sssd/ticket/2087
>>
>>IN_MULTICAST accepts address in the host order, but network order was
>>supplied.
>>---
>> src/monitor/monitor_netlink.c                 | 2 +-
>> src/providers/ldap/sdap_async_sudo_hostinfo.c | 2 +-
>> 2 files changed, 2 insertions(+), 2 deletions(-)
>>
>>diff --git a/src/monitor/monitor_netlink.c b/src/monitor/monitor_netlink.c
>>index c013423780f318f2a0f12dd5fa50babe12cdcd18..6baf13652b3c42ad92669272f262ac8b59450efe 100644
>>--- a/src/monitor/monitor_netlink.c
>>+++ b/src/monitor/monitor_netlink.c
>>@@ -610,7 +610,7 @@ static bool route_is_multicast(struct rtnl_route *route_obj)
>>             return false;
>>         }
>> 
>>-        return IN_MULTICAST(addr4->s_addr);
>>+        return IN_MULTICAST(ntohl(addr4->s_addr));
>>     } else if (nl_addr_get_family(nl) == AF_INET6) {
>>         addr6 = nl_addr_get_binary_addr(nl);
>>         if (!addr6) {
>>diff --git a/src/providers/ldap/sdap_async_sudo_hostinfo.c b/src/providers/ldap/sdap_async_sudo_hostinfo.c
>>index 4e33babd505dd218ddfd37af21e62fb0bcbe451c..f0c728108f19d965c4b1f07f1067d6862fd0c371 100644
>>--- a/src/providers/ldap/sdap_async_sudo_hostinfo.c
>>+++ b/src/providers/ldap/sdap_async_sudo_hostinfo.c
>>@@ -239,7 +239,7 @@ static int sdap_sudo_get_ip_addresses(TALLOC_CTX *mem_ctx,
>>             }
>> 
>>             /* ignore multicast */
>>-            if (IN_MULTICAST(ip4_addr->sin_addr.s_addr)) {
>>+            if (IN_MULTICAST(ntohl(ip4_addr->sin_addr.s_addr))) {
>>                 continue;
>>             }
>
>IN_MULTICAST(a) is defined as
>((((in_addr_t)(a)) & 0xf0000000) == 0xe0000000)
>
>Therefore "argument a" have to be in host byte order, because
>it dost not make sense to do a bitwise operation
>with numbers of different byte orders.
>
>With this patch, ntohl is used in each macro IN_MULTICAST.
>
>bash$ git grep -n IN_MULTICAST
>src/monitor/monitor_netlink.c:613:        return IN_MULTICAST(ntohl(addr4->s_addr));
>src/providers/dp_dyndns.c:181:        if (IN_MULTICAST(ntohl(addr->s_addr))) {
>src/providers/ldap/sdap_async_sudo_hostinfo.c:242:            if (IN_MULTICAST(ntohl(ip4_addr->sin_addr.
>
>ACK
>
>LS
>_______________________________________________
>sssd-devel mailing list
>sssd-devel at lists.fedorahosted.org
>https://lists.fedorahosted.org/mailman/listinfo/sssd-devel

src/providers/dp_dyndns.c
   187          } else if ((addr->s_addr & 0xffff0000) == 0xa9fe0000) {
                            ^^^^^^^^^^^^   ^^^^^^^^^^
                             net order     host order
                               comparision is wrong
            for example ip "192.168.254.169" can return false
We should use:
   --htonl for constant 0xffff0000
   --ntohl for addr->s_addr

   188              /* 169.254.0.0/16 */
   189              DEBUG(SSSDBG_FUNC_DATA, ("Link-local IPv4 address %s\n", straddr));
   190              return false;
   191          } else if (addr->s_addr == htonl(INADDR_BROADCAST)) {
                           ^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^^^^
                           net order             net order
                                 comparision is fine
   192              DEBUG(SSSDBG_FUNC_DATA, ("Broadcast IPv4 address %s\n", straddr));
   193              return false;
   194          }




I hope that I checked all important files, but someone else should take a look.

LS



More information about the sssd-devel mailing list