[SSSD] [PATCHES] DYNDNS: support mult. interfaces for dyndns_iface opt

Pavel Reichl preichl at redhat.com
Thu Jul 23 10:28:33 UTC 2015


On 07/23/2015 11:42 AM, Jakub Hrozek wrote:
> +static errno_t match_ip(const struct sockaddr *sa,
> +                        const struct sockaddr *sb,
> +                        bool *_res)
>>> Don't you think it would be simpler to just return bool? For cases where
>> Yes, it would be simpler, but I prefer to know that address is from family
>> that is not supported by the function. But I can change it if you still
>> prefer that.
>>
>>> the address family is totally different, can you just return false?
>> I actually think this is how function works (at least for address families
>> known to function)
>>>> +{
>>>> +    size_t addrsize;
>>>> +    bool res;
>>>> +    errno_t ret;
>>>> +    const void *addr_a;
>>>> +    const void *addr_b;
>>>> +
>>>> +    if (sa->sa_family == AF_INET) {
>>>> +        addrsize = sizeof(struct in_addr);
>>>> +        addr_a = (const void *) &((const struct sockaddr_in *) sa)->sin_addr;
>>>> +        addr_b = (const void *) &((const struct sockaddr_in *) sb)->sin_addr;
>>>> +    } else if (sa->sa_family == AF_INET6) {
>>>> +        addrsize = sizeof(struct in6_addr);
>>>> +        addr_a = (const void *) &((const struct sockaddr_in6 *) sa)->sin6_addr;
>>>> +        addr_b = (const void *) &((const struct sockaddr_in6 *) sb)->sin6_addr;
>>> Hmm, I was surprised I couldn't find any existing function or macro to
>>> compare a sockaddr or a sockaddr_storage except IN6_ARE_ADDR_EQUAL..
>>>
>>>> +    } else {
>>>> +        ret = EINVAL;
>>>> +        goto done;
>> unsupported address family
> I was thinking just return false here and skip that IP, just like for
> different families and skip the invalid address...
OK, I'll do it as you propose.
>
> btw what other address can there be on an interface?
I honestly don't know, that's why I tried to be careful about it.




More information about the sssd-devel mailing list